Кортежный вариант
Кортежный вариант - это вариант перечисления enum,
который хранит набор значений разных типов,
подобно кортежу. При объявлении такого варианта
указывается имя варианта и типы данных в круглых скобках.
При создании значения варианта передаются конкретные
значения этих типов.
Синтаксис
enum EnumName
{
VariantName(Type1, Type2, ...),
}
Пример
Давайте объявим перечисление с кортежным вариантом, который хранит два числа, и создадим его значение:
enum Shape
{
Circle(f64),
Rectangle(f64, f64),
}
fn main()
{
let circle = Shape::Circle(5.0);
let rect = Shape::Rectangle(3.0, 4.0);
match circle
{
Shape::Circle(r) => println!("Circle radius: {}", r),
Shape::Rectangle(w, h) => println!("Rectangle: {} x {}", w, h),
}
match rect
{
Shape::Circle(r) => println!("Circle radius: {}", r),
Shape::Rectangle(w, h) => println!("Rectangle: {} x {}", w, h),
}
}
Результат выполнения кода:
Circle radius: 5
Rectangle: 3 x 4
Пример
Давайте объявим перечисление с кортежным вариантом, хранящим строку и число, и выведем их значения:
enum Message
{
Text(String),
Code(String, i32),
}
fn main()
{
let text = Message::Text(String::from("abcde"));
let code = Message::Code(String::from("12345"), 200);
match text
{
Message::Text(s) => println!("Text: {}", s),
Message::Code(s, c) => println!("Code: {} - {}", s, c),
}
match code
{
Message::Text(s) => println!("Text: {}", s),
Message::Code(s, c) => println!("Code: {} - {}", s, c),
}
}
Результат выполнения кода:
Text: abcde
Code: 12345 - 200
Пример
Давайте объявим перечисление с кортежным вариантом, содержащим вектор чисел, и получим его элементы:
enum Data
{
Numbers(Vec<i32>),
Empty,
}
fn main()
{
let nums = Data::Numbers(vec![1, 2, 3, 4, 5]);
let empty = Data::Empty;
match nums
{
Data::Numbers(v) => println!("Numbers: {:?}", v),
Data::Empty => println!("Empty"),
}
match empty
{
Data::Numbers(v) => println!("Numbers: {:?}", v),
Data::Empty => println!("Empty"),
}
}
Результат выполнения кода:
Numbers: [1, 2, 3, 4, 5]
Empty
Смотрите также
-
перечисление
enum,
которое объявляет тип с набором вариантов -
вариант
Unit-вариант,
который не хранит данных -
вариант
Struct-вариант,
который хранит именованные поля -
конструкция
Деструктуризация,
которая извлекает значения из варианта