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

Кортежный вариант

Кортежный вариант - это вариант перечисления 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-вариант,
    который хранит именованные поля
  • конструкция Деструктуризация,
    которая извлекает значения из варианта
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить