跳到内容

枚举

lib 中声明的 enum 声明会声明一个 C 枚举

lib X
  # In C:
  #
  #  enum SomeEnum {
  #    Zero,
  #    One,
  #    Two,
  #    Three,
  #  };
  enum SomeEnum
    Zero
    One
    Two
    Three
  end
end

与 C 中一样,枚举的第一个成员的值为零,后续每个值都会递增一。

要使用一个值

X::SomeEnum::One # => One

您可以指定成员的值

lib X
  enum SomeEnum
    Ten       = 10
    Twenty    = 10 * 2
    ThirtyTwo = 1 << 5
  end
end

如您所见,成员值允许一些基本的数学运算:+-*/&|<<>>%

枚举成员的类型默认情况下为 Int32,即使您在常量值中指定了不同的类型

lib X
  enum SomeEnum
    A = 1_u32
  end
end

X::SomeEnum # => 1_i32

但是,您可以更改此默认类型

lib X
  enum SomeEnum : Int8
    Zero
    Two  = 2
  end
end

X::SomeEnum::Zero # => 0_i8
X::SomeEnum::Two  # => 2_i8

您可以在 fun 参数或 structunion 成员中使用枚举作为类型

lib X
  enum SomeEnum
    One
    Two
  end

  fun some_fun(value : SomeEnum)
end