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。在此處新增任何其他示例/教程。