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