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

Предположим, у меня есть такая настройка:

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 Ответ

2 голосов
/ 04 апреля 2019

Нет.

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...