我试图准确理解下面的代码片段完成了什么以及它是如何工作的。
class Nodes < Struct.new(:nodes) #Create a struct with array hash nodes
def <<(node)
nodes << node
self
end
end
答案 0 :(得分:4)
Struct.new(:nodes)
创建一个新的匿名Struct
子类,其中包含一个成员:nodes
。根据文档,您通常会将其分配给常量,例如:
Foo = Struct.new(:nodes)
foo = Foo.new([1, 2, 3]) #=> #<struct Foo nodes=[1, 2, 3]>
foo.nodes #=> [1, 2, 3]
Struct.new
class Nodes < Struct.new(...)
使用匿名Nodes
子类作为其超类创建一个新类Struct
:
Nodes.ancestors
#=> [Nodes, #<Class:0x007fa0320032d0>, Struct, Enumerable, Object, Kernel, BasicObject]
# ^
# |
# anonymous Struct sublass
这允许您在覆盖super
子类的方法时调用Struct
,例如:
class Nodes < Struct.new(:nodes)
def nodes
super
end
end