Ruby中的自定义类?

时间:2015-03-04 15:59:49

标签: ruby

我试图准确理解下面的代码片段完成了什么以及它是如何工作的。

class Nodes < Struct.new(:nodes) #Create a struct with array hash nodes
    def <<(node)
        nodes << node
        self
    end
end

1 个答案:

答案 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