Перечисления (enum)
Перечисление (enum
) деструктурируется аналогично:
// Требуется `allow`, чтобы подавить предупреждения, так как
// используется только один вариант.
#[allow(dead_code)]
enum Color {
// Эти 3 определяются только именем.
Red,
Blue,
Green,
// Они также связывают кортежи `u32` с разными именами: моделями цветов.
RGB(u32, u32, u32),
HSV(u32, u32, u32),
HSL(u32, u32, u32),
CMY(u32, u32, u32),
CMYK(u32, u32, u32, u32),
}
fn main() {
let color = Color::RGB(122, 17, 40);
// TODO ^ Попробуйте разные варианты для `color`
println!("Какой это цвет?");
// Перечисление (`enum`) можно деструктурировать с использованием `match`.
match color {
Color::Red => println!("Цвет - красный!"),
Color::Blue => println!("Цвет - синий!"),
Color::Green => println!("Цвет - зеленый!"),
Color::RGB(r, g, b) =>
println!("Красный: {}, зеленый: {}, синий: {}!", r, g, b),
Color::HSV(h, s, v) =>
println!("Оттенок: {}, насыщенность: {}, значение: {}!", h, s, v),
Color::HSL(h, s, l) =>
println!("Оттенок: {}, насыщенность: {}, яркость: {}!", h, s, l),
Color::CMY(c, m, y) =>
println!("Голубой: {}, пурпурный: {}, желтый: {}!", c, m, y),
Color::CMYK(c, m, y, k) =>
println!("Голубой: {}, пурпурный: {}, желтый: {}, ключ (черный): {}!",
c, m, y, k),
// Не нужно дополнительный случай, так как все варианты уже проверены
}
}