型列挙型は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));