与Ruby类的另一个类的实例交谈

时间:2011-04-28 22:20:09

标签: ruby class instance

之前可能已经回答了这个问题,但我缺乏使用电路板搜索找到解决方案的正确词汇。

我想要实现的是调用另一个类的类实例的方法。

我认为这个粗略的例子说明了我想要实现的目标:

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'

2 个答案:

答案 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的结果知道委托它。