Ruby: получить ссылку в контексте метода на объект, атрибутом которого является self

#ruby

#рубин #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:

Нет.

Обычно это делается путем передачи ссылки на родительский объект при инициализации дочерних объектов, например:

 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
  

Комментарии:

1. Идеальный. Это то, что я искал. Передача ссылки на метод была просто запутанной, и я зашел в тупик, пытаясь ее очистить. Конечно, это способ сделать это. Спасибо!