我有一组相互关联的对象,比如“人”。我希望能够从一个人到另一个人,这将是数组中的另一个对象。
所以我想出了这个:
class Person
attr_accessor :name, :parent, :collection
def parents
rtn = []
pid = @parent
while pid
p = collection.select{|i|i.name == pid}.first
if p
rtn << p
pid = p.parent
else
pid = nil
end
end
rtn
end
def to_s;@name;end
end
class PersonCollection < Array
def <<(obj)
obj.collection = self
super
end
end
...这允许我这样做:
p1 = Person.new
p1.name = 'Anna'
p2 = Person.new
p2.name = 'Bob'
p2.parent = 'Anna'
pc = PersonCollection.new
pc << p1
pc << p2
pp p2.parents
请原谅我相当笨拙的例子。关键目标是让集合的成员能够访问同一集合的其他成员。有没有更好的办法?