enum
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
parameter 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/reference/syntax_and_semantics/c_bindings/enum.html