Оператор Match
Часть раздела Fundamentals путешествия по Rust на Coddy — урок 26 из 75.
Выражение match позволяет сравнивать значение с рядом шаблонов и выполнять код в зависимости от того, какой шаблон совпал.
Вот базовая структура выражения match:
match variable {
pattern1 => expression1,
pattern2 => expression2,
// ... больше шаблонов
_ => default_expression,
}За ключевым словом match следует значение, которое вы хотите проверить.
Каждая ветка match состоит из шаблона, за которым следует => и код для выполнения.
Нижнее подчеркивание _ — это вариант по умолчанию, который соответствует всему, что не подошло под другие шаблоны.
Вот пример:
let day = 3;
let day_name = match day {
1 => "Monday",
2 => "Tuesday",
3 => "Wednesday",
// ... больше шаблонов,
_ => "Invalid day",
};Для нескольких строк кода в ветке используйте блок:
let day = 3;
let day_name = match day {
1 => {
println!("First day of the week!");
"Monday"
},
2 => "Tuesday",
// ... другие случаи
_ => "Invalid day",
};Вы можете сопоставлять несколько шаблонов, используя |:
let day = 3;
let day_type = match day {
1 | 2 | 3 | 4 | 5 => "Weekday",
6 | 7 => "Weekend",
_ => "Invalid day",
};Выражения match в Rust должны быть исчерпывающими, что означает, что они должны охватывать все возможные значения. Компилятор проверит это за вас.
Задание
НовичокСоздайте программу, которая принимает номер месяца (1 для января, 2 для февраля и т. д.) и выводит время года, к которому он относится. Используйте оператор match для реализации логики.
Времена года и соответствующие им месяцы:
- Winter: Декабрь (12), Январь (1), Февраль (2)
- Spring: Март (3), Апрель (4), Май (5)
- Summer: Июнь (6), Июль (7), Август (8)
- Autumn: Сентябрь (9), Октябрь (10), Ноябрь (11)
Шпаргалка
Выражение match сравнивает значение с шаблонами и выполняет код в зависимости от того, какой шаблон совпал:
match variable {
pattern1 => expression1,
pattern2 => expression2,
_ => default_expression,
}Базовый пример:
let day = 3;
let day_name = match day {
1 => "Monday",
2 => "Tuesday",
3 => "Wednesday",
_ => "Invalid day",
};Для нескольких строк кода в ветке используйте блок:
let day = 3;
let day_name = match day {
1 => {
println!("First day of the week!");
"Monday"
},
2 => "Tuesday",
_ => "Invalid day",
};Сопоставление с несколькими шаблонами с помощью |:
let day = 3;
let day_type = match day {
1 | 2 | 3 | 4 | 5 => "Weekday",
6 | 7 => "Weekend",
_ => "Invalid day",
};Выражения match должны быть исчерпывающими — они должны охватывать все возможные значения. Символ подчеркивания _ является случаем по умолчанию, который соответствует всему, что не совпало с другими шаблонами.
Попробуйте сами
use std::io;
fn main() {
let mut input = String::new();
io::stdin().read_line(&mut input).unwrap();
let month: i32 = input.trim().parse().unwrap();
// Напишите свой код ниже
let season =
// Не изменяйте строку ниже
println!("status = {}", season);
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Fundamentals
4Операторы. Часть 1
Арифметические операторыОператор остатка от деленияАрифметические сокращенияОператоры сравненияСравнение строк7Основы ввода-вывода
Вывод в консольЧтение ввода пользователяПовторение — До 120Повторение — True или False5Операторы. Часть 2
Логические операторы. Часть 1Логические операторы. Часть 2Повторение — простая логикаЛогические операторы. Часть 38Приложение-калькулятор
Приветственное сообщениеПолучение чисел3Переменные. Часть 2
Объявление типаСоглашения об именованииВывод типовПовторение: инициализация переменныхПриведение типов9Циклы
Цикл For по последовательностиЦикл WhileОператор BreakОператор ContinueВложенные циклыМетки цикловБесконечный циклПовторение — Динамический ввод