Оператор match
Оператор match сравнивает значение с несколькими
образцами и выполняет код того образца, которому
соответствует значение. Оператор принимает значение,
которое нужно сопоставить, и набор веток вида
образец => выражение. Сопоставление всегда
должно быть исчерпывающим: либо нужно перечислить все
возможные варианты, либо добавить ветку с подчёркиванием
_, которая сработает по умолчанию.
Если в ветке нужно выполнить несколько выражений,
её тело заключается в фигурные скобки. Оператор
match является выражением, поэтому его
результат можно присвоить переменной или вернуть
из функции.
Синтаксис
match value
{
pattern1 => expression1,
pattern2 => expression2,
_ => default_expression,
}
Пример
Давайте сопоставим число 2 с несколькими
образцами и выведем название числа:
fn main()
{
let num = 2;
let res = match num
{
1 => "one",
2 => "two",
3 => "three",
_ => "other",
};
println!("{}", res);
}
Результат выполнения кода:
"two"
Пример
Давайте сопоставим число 10, для которого нет
отдельного образца. Сработает ветка по умолчанию:
fn main()
{
let num = 10;
let res = match num
{
1 => "one",
2 => "two",
3 => "three",
_ => "other",
};
println!("{}", res);
}
Результат выполнения кода:
"other"
Пример
Давайте используем несколько выражений в ветке
match, заключив их в фигурные скобки:
fn main()
{
let num = 1;
match num
{
1 =>
{
let msg = "one";
println!("{}", msg);
},
_ => println!("other"),
}
}
Результат выполнения кода:
"one"
Пример
Давайте свяжем значение с переменной внутри образца, чтобы использовать его в теле ветки:
fn main()
{
let num = 5;
let res = match num
{
1 => "one".to_string(),
n => format!("got {}", n),
};
println!("{}", res);
}
Результат выполнения кода:
"got 5"