跳至內容

enum

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