型列挙

型列挙型はenumで定義します。使う時はそのいくつかの型から1つを使いたいような場合に使います。例えばそれはエラー型をまとめたものなどです。

以下にいくつかの Struct があります。

struct Foo;
struct Bar;
struct Baz;

これに対してenumValueを定義します。

enum Value {
  Foo,
  Bar,
  Baz,
}

属する型はValueとして束縛することができるようになります。

let _foo: Value = Value::Foo;
let _bar: Value = Value::Bar;
let _baz: Value = Value::Baz

また、enumも Struct のようにいくつかのトレイトをderiveにより実装することができます。

#[derive(Debug)]
enum Value {
  // snap
}

// snap

println!("{:?}", _foo);

match による現在の値の判定

上記のようにenumで束縛ができる為、関数などに渡した時にそのenumが実際にはどれか分からないという問題があります。それにはmatchによる条件分岐で処理を分けることで解決できます。

fn is_foo(value: &Value) -> bool {
  match value {
    Value::Foo => true,
    _ => false,
  }
}

assert!(is_foo(&_foo));
assert!(!is_foo(&_bar));