コンテンツにスキップ

enum

lib の中で enum を宣言することで C の列挙型を宣言できます。

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

C と同じく、列挙型の最初の要素はゼロで、以降の要素はそれぞれ1ずつ増加した値となります。

値は以下のように利用します。

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