コンテンツへスキップ

enum

lib 内の enum 宣言は、C の enum を宣言します。

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

C と同様に、enum の最初のメンバは値がゼロで、後続の各値は 1 ずつインクリメントされます。

値を使用するには

X::SomeEnum::One # => One

メンバの値を指定できます

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

ご覧のとおり、いくつかの基本的な算術演算がメンバの値に許可されています。+-*/&|<<>>、および %

enum メンバの型は、定数値に異なる型を指定した場合でも、デフォルトでは 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 のメンバの型として enum を使用できます。

lib X
  enum SomeEnum
    One
    Two
  end

  fun some_fun(value : SomeEnum)
end