【发布时间】:2015-07-01 00:33:53
【问题描述】:
假设你有一个User 类:
class User
attr_accessor :widgets
end
还有一个Widget:
class Widget
attr_accessor :owner
end
然后您将一些小部件分配给用户:
user = User.new
widget = Widget.new
widget.owner = user
widget2 = Widget.new
widget2.owner = user
user.widgets = [widget, widget2]
现在你有一个 user → widgets → owner 的递归。 user.inspect 为每个小部件显示一次相同的 user 引用,使输出混乱:
user.widgets.first.owner.widgets.first.owner
=> #<User:0x00000001cac820 @widgets=[#<Widget:0x00000001ca45f8 @owner=#<User:0x00000001cac820 ...>>, #<Widget:0x00000001c87a20 @owner=#<User:0x00000001cac820 ...>>]>
如果我们要将此数据结构简化为我们将拥有的哈希:
{ user:
{ widgets: [ { widget: ... },
{ widget: ... } ]
}
}
我们可以传递它而不是分配widget.owner,并且引用父级user 很容易。
我想知道是否有一种方法可以通过子对象访问父对象,而不必将owner 分配给所有子对象,一个可以像这样工作的接口:
user = User.new
widget = Widget.new
user.widgets = [widget]
widget.parent
# => #<User:... @widgets=[#<Widget:...>]>
【问题讨论】:
-
你有什么问题?
-
有没有办法通过子对象访问父对象而不必将
owner分配给所有子对象? -
任何你想访问的对象都必须有一个引用,否则你不能访问它。
-
是的,但是对于哈希数据结构示例,我可以传递该哈希并从小部件中引用它,以便访问父对象的属性。它不会被实例化为
User,但至少数据会在那里。 -
是的,这是有道理的,但似乎是多余的。从数据建模的角度来看,您不会想要无限散列。但从 OOD 的角度来看,无论对象嵌套的深度如何,您都可能希望访问小部件所有者。
标签: ruby oop recursion variable-assignment