Сопоставление нескольких значений
Часть раздела Logic & Flow путешествия по Rust на Coddy — урок 2 из 66.
Иногда вам нужно сопоставить несколько различных значений, которые должны вызывать один и тот же код. Вместо того чтобы писать отдельные ветки для каждого значения, Rust позволяет объединять несколько шаблонов в одной ветке с помощью оператора | (ИЛИ).
Вот как можно сопоставить несколько значений в одной ветке:
let month = 12;
match month {
12 | 1 | 2 => println!("Winter"),
3 | 4 | 5 => println!("Spring"),
6 | 7 | 8 => println!("Summer"),
9 | 10 | 11 => println!("Fall"),
_ => println!("Invalid month"),
}Оператор | работает как «ИЛИ» в английском языке — если значение соответствует любому из шаблонов, разделённых |, эта ветка будет выполнена. Это делает ваш код гораздо чище, чем использование отдельных веток, которые делают одно и то же.
Задание
ЛегкоВы получите номер дня (1-7) в качестве входных данных, представляющий день недели. Прочитайте входные данные, преобразуйте их в целое число и используйте выражение match с оператором |, чтобы вывести, является ли этот день будним или выходным.
Требования:
- Если день —
1,2,3,4или5, выведите"Weekday" - Если день —
6или7, выведите"Weekend" - Для любого другого числа выведите
"Invalid day"
Входные данные: Одно целое число, представляющее номер дня
Выходные данные: Выведите либо "Weekday", "Weekend" или "Invalid day"
Шпаргалка
Вы можете объединить несколько шаблонов в одной ветке match, используя оператор | (ИЛИ). Если значение соответствует любому из шаблонов, разделенных |, эта ветка будет выполнена.
let month = 12;
match month {
12 | 1 | 2 => println!("Winter"),
3 | 4 | 5 => println!("Spring"),
6 | 7 | 8 => println!("Summer"),
9 | 10 | 11 => println!("Fall"),
_ => println!("Invalid month"),
}Попробуйте сами
use std::io;
fn main() {
// Считать ввод
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
let day: i32 = input.trim().parse().expect("Please enter a number");
// TODO: Напишите свой код ниже, используя выражение match с оператором |
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Logic & Flow
1Продвинутое управление потоком выполнения
Выражение 'match'Сопоставление нескольких значенийСопоставление диапазоновВыражение 'if let'Циклы как выраженияИтоги — Простой парсер команд4Группировка данных с помощью структур
Что такое структура?Обзор структурДоступ к полям структурыИзменяемые структурыСтруктуры как параметры функцийКортежные структурыИтоги: создание структуры Book7Обработка ошибок с помощью 'Result'
Что такое 'Result'?Использование 'match' с 'Result'is_ok() и is_err()Сокращения: unwrap и expectОператор вопросительного знака '?'Парсинг строк в числаИтоги: функция безопасного деления10Замыкания и анонимные функции
Что такое замыкание?Определение простого замыканияЗамыкания с параметрамиЗахват окруженияИтоги: Простое замыкание-сумматор2Введение в векторы
Что такое вектор?Создание вектораДобавление элементов с помощью pushДоступ к элементам вектораИтерация по векторуИзменяемая итерацияУдаление элементовИтоги — Простой счетчик очков5Пары «ключ-значение» в Hash Map
Что такое Hash Map?Создание Hash MapВставка пар «ключ-значение»Доступ к значениямИтерация по Hash MapОбновление значенияУдаление парыИтоги — Счетчик слов8Проект: Простой инвентарь товаров
Настройка проектаДобавление товараПроверка наличияПродажа товараСобираем всё воедино3Список дел в командной строке
Настройка проектаДобавление задачиПросмотр всех задачУдаление задачиИтоговый код6Обработка отсутствия значения с 'Option'
Что такое 'Option'?Использование 'match' с 'Option'is_some() и is_none()Распаковка 'Option'Метод expectЗначение по умолчанию: unwrap_orИтоги: поиск элемента