Ruby类与结构

我已经看到使用Structs的代码库来包装类中的属性和行为。 Ruby类和Struct有什么区别? 何时应该使用另一个。?

来自Struct文档 :

Struct是一种使用访问器方法将多个属性捆绑在一起的便捷方式,无需编写显式类。

Struct类生成包含一组成员及其值的新子类。 对于每个成员,创建类似于Module#attr_accessor的reader和writer方法。

所以,如果我想要一个可以访问name属性(读写)的Person类,我可以通过声明一个类来实现:

 class Person attr_accessor :name def initalize(name) @name = name end end 

或使用Struct:

 Person = Struct.new(:name) 

在这两种情况下,我都可以运行以下代码:

  person = Person.new person.name = "Name" #or Person.new("Name") puts person.name 

何时使用?

正如描述所述,当我们需要一组可访问的属性而不必编写显式类时,我们使用Structs。

例如,我想要一个点变量来保存X和Y值:

 point = Struct.new(:x, :y).new(20,30) point.x #=> 20 

更多例子:

Struct是用于创建类的Ruby简写。 在适用的地方使用Struct可以简化代码。 在https://www.rubytapas.com/2012/11/07/episode-020-struct/上有一个很好的讨论。