Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsSpPtEn 77 of 288 menu
◀ ▶

Образец перечисления в Rust

У перечисления каждый вариант - отдельная форма значения. В образце пишут имя варианта и, если у него есть поля, скобки или фигурные скобки с именами для данных. Так одна ветка разбора и выбирает вариант, и открывает его содержимое.

Вариант без данных сравнивают просто по имени. Вариант с одной строкой или числом записывают как Text(t): буква в скобках получает владение или ссылку в зависимости от того, как устроен тип.

Разберем простые сообщения:

enum Msg { Ping, Text(String), } fn main() { let msg = Msg::Text(String::from("hi")); let out = match msg { Msg::Ping => String::from("ping"), Msg::Text(t) => t, }; println!("{}", out); }

На экране "hi". Ветка Text(t) забрала строку в t, а вариант Ping обработали отдельно.

Несколько вариантов с данными различают по имени и форме скобок:

enum Packet { Empty, Number(i32), Pair(i32, i32), } fn main() { let p = Packet::Pair(2, 3); let sum = match p { Packet::Empty => 0, Packet::Number(n) => n, Packet::Pair(a, b) => a + b, }; println!("{}", sum); }

Дано перечисление:

enum Shape { Circle, Square(u32), } let s = Shape::Square(5);

Разберите s: для круга выведите "round", для квадрата выведите сторону из варианта.

Дано перечисление:

enum Job { Stop, Run(u32), } let job = Job::Run(7);

Запишите разбор, который для Run удваивает число варианта, а для Stop дает ноль, и выведите результат.

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

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить