РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
539 of 1245 menu

Деструктуризация 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

Смотрите также

  • оператор match,
    который выполняет сопоставление с образцом
  • конструкция if let,
    которая сопоставляет один образец
  • конструкция while let,
    которая сопоставляет образец в цикле
  • образец wildcard,
    который игнорирует часть значений
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить