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

Дискриминант enum

Дискриминант enum - это целочисленное значение, которое связывается с каждым вариантом перечисления. По умолчанию Rust присваивает первому варианту значение 0, а каждому следующему - на единицу больше. Дискриминант можно задать явно, а также получить его в коде с помощью приведения к целому типу или метода discriminant.

Синтаксис

enum Name { Variant1 = value1, Variant2 = value2, }

Пример

Давайте создадим перечисление с явно заданными дискриминантами и выведем их значения:

enum Color { Red = 10, Green = 20, Blue = 30, } fn main() { println!("{}", Color::Red as i32); println!("{}", Color::Green as i32); println!("{}", Color::Blue as i32); }

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

10 20 30

Пример

Если дискриминанты не заданы явно, Rust присваивает их автоматически, начиная с нуля:

enum Direction { North, South, East, West, } fn main() { println!("{}", Direction::North as i32); println!("{}", Direction::South as i32); println!("{}", Direction::East as i32); println!("{}", Direction::West as i32); }

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

0 1 2 3

Пример

Метод discriminant позволяет получить дискриминант варианта в виде значения типа Discriminant:

use std::mem::discriminant; enum Status { Active = 100, Inactive = 200, Pending = 300, } fn main() { let a = Status::Active; let b = Status::Inactive; let c = Status::Active; println!("{}", discriminant(&a) == discriminant(&c)); println!("{}", discriminant(&a) == discriminant(&b)); }

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

true false

Пример

Дискриминант можно использовать в выражениях match для сравнения вариантов:

enum Priority { Low = 1, Medium = 5, High = 10, } fn main() { let p = Priority::High; let level = match p as i32 { 1 => "low", 5 => "medium", 10 => "high", _ => "unknown", }; println!("{}", level); }

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

"high"

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

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