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
更多例子:
- http://blog.steveklabnik.com/posts/2012-09-01-random-ruby-tricks–struct-new
- “ 何时在Ruby中使用Struct而不是Hash? ”也有一些非常好的观点(与使用hash相比)。
Struct是用于创建类的Ruby简写。 在适用的地方使用Struct可以简化代码。 在https://www.rubytapas.com/2012/11/07/episode-020-struct/上有一个很好的讨论。