Struct
与定义initialize
方法相比,使用的优点和缺点是什么?
我已经可以看到它涉及的代码更少,并且在缺少参数时也不会引发:
使用结构:
class Fruit < Struct.new(:name)
end
> Fruit.new.name
=> nil
> Fruit.new('apple').name
=> "apple"
使用初始化:
class Fruit
attr_accessor :name
def initialize(name)
@name = name
end
end
> Fruit.new.name
ArgumentError: wrong number of arguments (0 for 1)
> Fruit.new('apple').name
=> "apple"
你觉得呢?你有没有什么想法 ?您Struct
在项目中经常使用吗?
该类(非结构)具有一个更简单的祖先树:
>> Fruit.ancestors
=> [Fruit, Object, Kernel, BasicObject]
与struct版本相比:
>> Fruit.ancestors
=> [Fruit, #<Class:0x1101c9038>, Struct, Enumerable, Object, Kernel, BasicObject]
因此,Struct类可能会误认为是数组(很少见,但绝对有可能发生)
fruit = Fruit.new("yo")
# .. later
fruit.each do |k|
puts k
end
# outputs: yo
所以...我将Structs用作一次性数据对象。我在域和应用程序中使用“真实”类。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句