Деструктуризация enum
Деструктуризация enum - это механизм, позволяющий
извлекать значения, хранящиеся внутри вариантов
перечисления. Она выполняется с помощью сопоставления
с образцом в конструкциях match, if let
и while let. Образец описывает структуру
варианта и связывает его внутренние данные с
переменными.
Синтаксис
match значение
{
Enum::Variant(переменная) => { ... },
Enum::Variant { поле } => { ... },
}
Пример
Давайте деструктурируем вариант Tuple
перечисления Shape и извлечём его данные:
enum Shape
{
Circle(f64),
Rectangle(f64, f64),
}
fn main()
{
let shape = Shape::Rectangle(3.0, 4.0);
match shape
{
Shape::Circle(r) => println!("Circle {}", r),
Shape::Rectangle(w, h) => println!("{} {}", w, h),
}
}
Результат выполнения кода:
3 4
Пример
Давайте деструктурируем вариант Struct
перечисления Message и извлечём его поля:
enum Message
{
Quit,
Move { x: i32, y: i32 },
}
fn main()
{
let msg = Message::Move { x: 1, y: 2 };
match msg
{
Message::Quit => println!("quit"),
Message::Move { x, y } => println!("{} {}", x, y),
}
}
Результат выполнения кода:
1 2
Пример
Давайте деструктурируем enum Option
с помощью if let:
fn main()
{
let opt = Some(12345);
if let Some(n) = opt
{
println!("{}", n);
}
}
Результат выполнения кода:
12345