struct¶
在 lib
內宣告的 struct
會宣告一個 C 結構。
lib C
# In C:
#
# struct TimeZone {
# int minutes_west;
# int dst_time;
# };
struct TimeZone
minutes_west : Int32
dst_time : Int32
end
end
您也可以指定多個相同類型的欄位
lib C
struct TimeZone
minutes_west, dst_time : Int32
end
end
遞迴結構的運作方式與您預期的一樣
lib C
struct LinkedListNode
prev, _next : LinkedListNode*
end
struct LinkedList
head : LinkedListNode*
end
end
若要建立結構的實例,請使用 new
tz = C::TimeZone.new
這會在堆疊上配置結構。
C 結構的所有欄位都會以「零」初始化:整數和浮點數從零開始,指標從零的位址開始,等等。
若要避免這種初始化,您可以使用 uninitialized
tz = uninitialized C::TimeZone
tz.minutes_west # => some garbage value
您可以設定和取得其屬性
tz = C::TimeZone.new
tz.minutes_west = 1
tz.minutes_west # => 1
如果指定的值與屬性的類型不完全相同,則會嘗試 to_unsafe。
您也可以使用類似具名引數的語法初始化某些欄位
tz = C::TimeZone.new minutes_west: 1, dst_time: 2
tz.minutes_west # => 1
tz.dst_time # => 2
C 結構會以值 (作為副本) 傳遞給函式和方法,並且在從方法傳回時也會以值傳遞
def change_it(tz)
tz.minutes_west = 1
end
tz = C::TimeZone.new
change_it tz
tz.minutes_west # => 0
請參閱類型文法,以了解結構欄位類型中使用的符號。