型列挙型はenum
で定義します。使う時はそのいくつかの型から1つを使いたいような場合に使います。例えばそれはエラー型をまとめたものなどです。
以下にいくつかの Struct があります。
struct Foo;
struct Bar;
struct Baz;
これに対してenum
、Value
を定義します。
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));