之前可能已经回答了这个问题,但我缺乏使用电路板搜索找到解决方案的正确词汇。
我想要实现的是调用另一个类的类实例的方法。
我认为这个粗略的例子说明了我想要实现的目标:
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'
答案 0 :(得分:2)
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
答案 1 :(得分:2)
您可以使用委托人:
,而不是公开@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
的结果知道委托它。