这个问题可能之前已经被回答过,但我缺乏适当的词汇来使用董事会搜索找到解决方案。
我想要实现的是调用另一个类的类实例的方法。
我认为这个粗略的例子说明了我想要实现的目标:
class ClassA
def method_a
return 'first example'
end
def method_b
return 'second example'
end
end
class ClassB
def initialize
object = classA.new
end
end
the_example = classB.new
the_example.[whatever-I’m-missing-to-talk-with-object].method_b
# should return 'second exampe'
object
需要是一个实例变量,以便在调用 initialize
后它不会超出范围,因此将其称为 @object
。
然后您需要使
@object
在 classB
的定义之外可访问,因此您需要声明这一点。
class ClassB
attr_reader :object # lets you call 'some_instance_of_classb.object'
def initialize
@object = ClassA.new
end
end
您可以使用委托人,而不是公开
@object
变量:
require "forwardable"
class ClassB
extend Forwardable
def_delegators :@object, :method_b
def initialize
@object = ClassA.new
end
end
这样,当
the_example
收到 method_b
调用时,它就知道通过返回 @object.method_b
的结果来委托它。