Страж match
Страж match - это дополнительное условие, которое
записывается после шаблона в ветке match
с помощью ключевого слова if. Если шаблон
совпал, но условие стража ложно, то управление
передаётся следующей ветке. Страж позволяет
уточнить сопоставление, не усложняя сам шаблон.
Параметром страж принимает логическое выражение,
которое может использовать переменные, связанные
в шаблоне.
Синтаксис
match value
{
pattern if condition => result,
_ => default,
}
Пример
Давайте проверим число с помощью стража
if в ветке match:
fn main()
{
let num = 5;
let res = match num
{
n if n > 0 => "positive",
n if n < 0 => "negative",
_ => "zero",
};
println!("{}", res);
}
Результат выполнения кода:
"positive"
Пример
Давайте используем стражи в нескольких ветках
match для диапазонов значений:
fn main()
{
let num = 15;
let res = match num
{
n if n < 10 => "small",
n if n < 20 => "medium",
_ => "large",
};
println!("{}", res);
}
Результат выполнения кода:
"medium"
Пример
Давайте применим страж к варианту перечисления
Option, чтобы проверить положительное число:
fn main()
{
let val: Option<i32> = Some(7);
let res = match val
{
Some(n) if n > 0 => "positive",
Some(n) if n < 0 => "negative",
Some(_) => "zero",
None => "none",
};
println!("{}", res);
}
Результат выполнения кода:
"positive"
Смотрите также
-
оператор
match,
который выполняет сопоставление с образцом -
конструкция
if-let,
которая упрощает сопоставление с одним шаблоном -
перечисление
Some,
которое представляет наличие значения -
перечисление
destructure,
которое позволяет извлекать данные из шаблонов