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

Конструкция match в Rust

Конструкция match выбирает одно значение из некоторого ряда значений. Это альтернатива множеству else if. Когда образец подошел, выполняются команды только этой ветки. Провала в следующую ветку нет: отдельная команда разрыва не нужна, остальные образцы не проверяют.

Пусть у нас есть цепочка проверок:

let num = 1; if num == 1 { println!("variant 1"); } else if num == 2 { println!("variant 2"); } else if num == 3 { println!("variant 3"); } else { println!("variant not supported"); }

Перепишем этот код через match. То, что стоит после =>, можно и выполнить, и записать в переменную как результат:

let num = 1; match num { 1 => println!("variant 1"), // сработает это 2 => println!("variant 2"), 3 => println!("variant 3"), _ => println!("variant not supported"), }

Результат ветки можно присвоить в переменную. Перебор обязан покрыть все возможные значения, поэтому запасной образец _ ловит остальное:

let lang = "ru"; let res = match lang { "ru" => "111", "en" => "222", "de" => "333", _ => "unsupported language", }; println!("{}", res); // выведет 111

Перебор обязан покрыть все возможные значения. Если заранее не перечислить каждый случай, добавляют заглушку _, которая ловит все остальное.

Выберем сообщение по коду дня:

let day = 3; match day { 1 => println!("mon"), 2 => println!("tue"), 3 => println!("wed"), _ => println!("other"), }

При значении вне списка сработает заглушка:

let day = 9; match day { 1 => println!("mon"), 2 => println!("tue"), _ => println!("other"), }

Дано число:

let level = 2;

Сопоставьте level с 1, 2 и остальными и выведите "easy", "mid" или "hard".

Дано число:

let code = 0;

Для 0 выведите "off", для 1 выведите "on", для прочих "?".

Скажите, что произойдет, если убрать ветку с заглушкой, а число может быть любым.

Переменная num может принимать значения 1, 2, 3 или 4. Определите, в какую пору года попадает значение этой переменной.

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