offsetof¶
一個 offsetof
表達式會回傳類別或結構的實例中,某個欄位的位元組偏移量。
offsetof
表達式有兩種形式。第一種形式接受任意型別作為第一個引數,以及一個以 @
為前綴的實例變數名稱作為第二個引數,並回傳該實例變數相對於給定型別實例的位元組偏移量。
struct Foo
@x = 0_i64
@y = 34_i8
@z = 42_u16
end
offsetof(Foo, @x) # => 0
offsetof(Foo, @y) # => 8
offsetof(Foo, @z) # => 10
第二種形式接受任何 Tuple
實例型別作為第一個引數,以及一個整數字面值索引作為第二個引數,並回傳對應的元組元素相對於給定型別實例的位元組偏移量。
offsetof(Tuple(Int64, Int8, UInt16), 0) # => 0
offsetof(Tuple(Int64, Int8, UInt16), 1) # => 8
offsetof(Tuple(Int64, Int8, UInt16), 2) # => 10
這是一個底層基本類型,只有在 C API 需要直接與 Crystal 型別的資料佈局介接時才有用。