An enum
declaration inside a lib
declares a C enum:
lib X # In C: # # enum SomeEnum { # Zero, # One, # Two, # Three, # }; enum SomeEnum Zero One Two Three end end
As in C, the first member of the enum has a value of zero and each successive value is incremented by one.
To use a value:
X::SomeEnum::One #=> One
You can specify the value of a member:
lib X enum SomeEnum Ten = 10 Twenty = 10 * 2 ThirtyTwo = 1 << 5 end end
As you can see, some basic math is allowed for a member value: +
, -
, *
, /
, &
, |
, <<
, >>
and %
.
The type of an enum member is Int32
by default, even if you specify a different type in a constant value:
lib X enum SomeEnum A = 1_u32 end end X::SomeEnum #=> 1_i32
However, you can change this default type:
lib X enum SomeEnum : Int8 Zero, Two = 2 end end X::SomeEnum::Zero #=> 0_i8 X::SomeEnum::Two #=> 2_i8
You can use an enum as a type in a fun
argument or struct
or union
members:
lib X enum SomeEnum One Two end fun some_fun(value : SomeEnum) end
To the extent possible under law, the persons who contributed to this workhave waived
all copyright and related or neighboring rights to this workby associating CC0 with it.
https://crystal-lang.org/docs/syntax_and_semantics/c_bindings/enum.html