Ruby:结构与初始化

皮埃尔·路易·戈特弗洛伊斯

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在项目中经常使用吗?

杰西·沃尔加莫特(Jesse Wolgamott)

该类(非结构)具有一个更简单的祖先树:

>> 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章