Я хочу знать, что является лучшим способом создать двусторонние отношения между отцом и детьми в рубине. Например, следующий код:Родительские/детские отношения в рубине?
class Bar
def initialize(name)
@name = name
end
end
class Foo
attr_accessor :children
def initialize(names = %w(john ben maudy))
@children = names.map{|n| Bar.new(n)}
end
end
С этим, это фея легко получить из Foo
экземпляра его Bar
детей. Но это не так. Для например:
# Instanciates a Foo and get his first son
bar = Foo.new.children.first
# bar can't get to his parent. Essentially, I want
bar.foo
Единственная идея, которую я имел до сих пор пройти self
в методе Bar#new
, чтобы сохранить ссылку на bar
объектов, но я хотел бы избежать этого. Можете ли вы объяснить мне лучший способ?
EDIT
От гугле я мог бы найти caller method, что дает мне номер строки. Однако я искал ссылку на объект, немного более абстрактную, чем номер строки.
EDIT 2
Вы можете сделать это in python
EDIT 3
Это spinoff of pry, кажется, лучше всего подходит. Если кто-нибудь найдет способ сделать это без драгоценного камня, я могу ответить на его собственный вопрос.
Предоставление 'наследование Bar' от' Foo' может дать вам доступ вы хотите. – user2276204
@ user2276204, но 'Foo' может быть« обезьяной », а bar может быть« бананом »- отношения имеют смысл без вмешательства – fotanus
Возможно, вы захотите изменить свои имена переменных терминов/экземпляров. Это не имеет никакого отношения к отношениям между родителем и ребенком в смысле ОО и, вероятно, путает вещи. –