使用Struct
与定义initialize
方法相比有哪些优缺点?
我在错过参数时已经看到它涉及更少的代码和没有提升:
使用struct:
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
?
答案 0 :(得分:14)
类(非结构)具有更简单的祖先树:
>> Fruit.ancestors
=> [Fruit, Object, Kernel, BasicObject]
与struct version相比:
>> 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作为丢弃数据对象。我使用&#34;真实&#34;我的域和应用程序中的类。