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

Структурный вариант

Структурный вариант - это разновидность варианта перечисления, которая хранит данные в виде именованных полей, подобно обычной структуре. Такой вариант позволяет обращаться к своим полям по именам при сопоставлении с образцом. Синтаксически структурный вариант объявляется с фигурными скобками, внутри которых перечисляются имена полей и их типы.

Синтаксис

enum EnumName { VariantName { field1: Type1, field2: Type2, } }

Пример

Давайте объявим перечисление Shape со структурным вариантом Rectangle, который хранит ширину и высоту:

enum Shape { Rectangle { width: u32, height: u32, }, } fn main() { let rect = Shape::Rectangle { width: 10, height: 5, }; if let Shape::Rectangle { width, height } = rect { println!("{}", width * height); } }

Результат выполнения кода:

50

Пример

Давайте добавим второй вариант и обработаем оба случая с помощью match:

enum Shape { Circle { radius: f64, }, Rectangle { width: u32, height: u32, }, } fn main() { let shapes = [ Shape::Circle { radius: 2.0 }, Shape::Rectangle { width: 3, height: 4 }, ]; for shape in shapes { match shape { Shape::Circle { radius } => { println!("circle {}", radius); } Shape::Rectangle { width, height } => { println!("rect {}", width * height); } } } }

Результат выполнения кода:

"circle 2" "rect 12"

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

  • ключевое слово enum,
    которое объявляет перечисление
  • кортежный вариант tuple variant,
    который хранит данные без имен полей
  • конструкция destructure,
    которая извлекает поля из варианта
  • конструкция if let,
    которая сопоставляет один вариант без ветвления
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить