Ruby:在方法上下文中获取对对象的引用,即self是其属性

时间:2019-04-04 04:25:10

标签: ruby

假设我有这样的设置:

class Foo
  attr_accessor :bar

  def initialize
    @bar = Bar.new
  end
end

class Bar
  def bar_method
    self.class # => Bar
    whatever???.class # => Foo
  end
end

foo = Foo.new
foo.bar.bar_method

我知道我可以这样设置方法:

def bar_method(selfs_self)
  selfs_self.class # => Foo
end

并调用如下方法:foo.bar.bar_method(foo)以获取我想要的。但这似乎是多余的。在bar_method内,有什么方法可以获取对foo的引用,而无需特别传递对它的引用?

1 个答案:

答案 0 :(得分:2)

否。

通常,这是通过在初始化子对象时将引用传递给父对象来完成的,例如:

class Foo
  attr_accessor :bar

  def initialize
    @bar = Bar.new(self)
  end
end

class Bar
  attr_reader :foo

  def initialize(foo)
    @foo = foo
  end

  def bar_method
    self.class # => Bar
    foo.class # => Foo
  end
end