我见过使用结构来包装类内的属性和行为的代码库。
Ruby 类和结构有什么区别?什么时候应该使用其中一种而不是另一种?
来自结构文档 http://www.ruby-doc.org/core-2.1.2/Struct.html:
Struct 是一种使用访问器方法将多个属性捆绑在一起的便捷方法,而无需编写显式类。
Struct 类生成新的子类,其中包含一组成员及其值。对于每个成员,都会创建类似于 Module#attr_accessor 的读取器和写入器方法。
所以,如果我想要一个Person
我可以访问名称属性(读和写)的类,我可以通过声明一个类来实现:
class Person
attr_accessor :name
def initalize(name)
@name = name
end
end
或使用结构:
Person = Struct.new(:name)
在这两种情况下,我都可以运行以下代码:
person = Person.new
person.name = "Name"
#or Person.new("Name")
puts person.name
什么时候用?
正如描述所述,当我们需要一组可访问的属性而不必编写显式类时,我们可以使用结构。
例如,我想要一个点变量来保存 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 http://blog.steveklabnik.com/posts/2012-09-01-random-ruby-tricks--struct-new
- "在 Ruby 中何时使用 Struct 而不是 Hash? https://stackoverflow.com/questions/3275594/when-to-use-struct-instead-of-hash-in-ruby”也有一些非常好的点(与使用哈希相比)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)