与另一个类的 Ruby 类实例对话

问题描述 投票:0回答:2

这个问题可能之前已经被回答过,但我缺乏适当的词汇来使用董事会搜索找到解决方案。

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

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

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'
ruby class instance
2个回答
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

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
的结果来委托它。

© www.soinside.com 2019 - 2024. All rights reserved.