#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. Идеальный. Это то, что я искал. Передача ссылки на метод была просто запутанной, и я зашел в тупик, пытаясь ее очистить. Конечно, это способ сделать это. Спасибо!