Ruby 编程/参考/对象/Struct
外观
结构 (Struct) 是一个
- 数据容器,一种方便的方式将多个属性捆绑在一起,而无需编写显式的类。
- 命名数据集合(变量集),表示单个想法或对象。
在“结构”内部,有一个字段列表 - 例如
- 联系人:名,姓,电话,电子邮件,生日。
- 地址:街道,城市,州,地区,邮政编码,GPS 位置/坐标。
结构类似于数组,因为它们包含多个数据。但是,我们不是使用每个数据片的索引,而是使用变量“名称”。使用上面的示例
- 结构(数据集合)= 联系人
- 结构“联系人”中的第一个字段是“名”
Struct 可在无需任何其他 require 语句的情况下使用。
在 Ruby 中,Struct.new 将一组字段名称作为参数,并返回一个新的类。
Newtype = Struct.new(:data1, :data2)
n = Newtype.new # => <struct Newtype data1=nil, data2=nil>
类 Struct 具有一个方法 new,就像其他类一样。但是该方法不会返回 Struct 的实例,而是返回一个类,该类是类 Struct 的子类。例如
pnt = Struct.new(:x, :y) # => #<Class:0x143ce50>
pnt.ancestors #=> [#<Class:0x143d6f0>, Struct, Enumerable, Object, Kernel, BasicObject]
Struct.new 的参数是生成的类将具有的字段名称。这些名称必须以符号的形式提供。
- 方法/方式 1
Struct.new("Point", :x, :y) #=> Struct::Point
origin = Struct::Point.new(0,0) # #<struct Struct::Point x=0, y=0>
- 方法/方式 2
Structure_example = Struct.new(:filed1, :field2, :field3)
se = Structure_example.new("abc", "xyz", 123) => #<struct Structure_example filed1="abc", field2="xyz", field3=123>
Struct::new 返回一个新的类对象,然后可以使用该对象创建新结构的特定实例。实际参数的数量必须小于或等于为该类定义的属性数量;未设置的参数默认为 nil。传递过多的参数将引发 ArgumentError。
se[:field3] = 456
p se => #<struct Structure_example filed1="abc", field2="xyz", field3=456>
p se.values => ["abc", "xyz", 456]
p se.members => [:field1, :field2, :field3]
Customer = Struct.new(:name, :address)
joe1 = Customer.new("Joe", "adr1")
joe2 = Customer.new("Joe", "adr1")
jane = Customer.new("Jane", "adr2")
joe1 == joe2 #=> true
joe1.eql?(joe2) #=> true
joe1.equal?(joe2) #=> false
joe1 == jane #=> false
print joe1[:name], joe1["name"], joe1[0] # same result in each case - => "Joe"
请参阅 Struct 的 rdoc。在此处添加任何其他示例/教程。