Разбор перечисления в Rust
Разбор перечисления устроен так же, как разбор числа: слева значение, справа ветки с образцами. Для типа с вариантами образец - это имя варианта через двойное двоеточие после имени типа.
Разбор обязан назвать каждый вариант, иначе код не собирается. Компилятор считает, что значение может быть любым из списка, и требует отдельную ветку на каждое имя:
fn main() {
enum Status {
Draft,
Sent,
Done,
}
let s = Status::Sent;
match s {
Status::Draft => println!("draft"),
Status::Sent => println!("sent"),
Status::Done => println!("done"),
}
}
Если убрать любую ветку, сборка остановится с сообщением о непокрытом варианте. Для трех имен нужны ровно три ветки без заглушки:
fn main() {
enum Status {
Draft,
Sent,
Done,
}
let s = Status::Done;
match s {
Status::Draft => println!("d"),
Status::Sent => println!("s"),
Status::Done => println!("f"),
}
}
Дано перечисление:
enum Lamp {
Dark,
Bright,
}
let l = Lamp::Dark;
Разберите l и выведите "dark"
или "bright" в main.rs.
Дано перечисление:
enum Gate {
Open,
Shut,
}
let g = Gate::Shut;
Скажите, сколько веток нужно в разборе, чтобы программа собралась.
Дано перечисление:
enum Phase {
A,
B,
C,
}
let p = Phase::B;
Разберите p и выведите букву
варианта одной строкой в main.rs.