Защита образца в Rust
Иногда одной формы числа или значения мало:
нужно еще проверить диапазон или сравнение.
После имени в образце пишут слово if
и выражение. Такая запись называется защитой:
ветка срабатывает только когда и образец
подошел, и условие истинно.
Защита помогает не плодить лишние ветки с одинаковым телом. Сначала проверяют более узкие случаи с условием, затем оставляют запасной образец для всего остального.
Разберем число с порогом десять:
fn main() {
let n = 15;
let label = match n {
x if x > 10 => "many",
_ => "few",
};
println!("{}", label);
}
На экране "many". Переменная x
связана с числом в образце, а защита
x > 10 решает, подходит ли эта ветка.
Тот же прием работает с несколькими защищенными ветками перед запасной:
fn main() {
let score = 7;
let mark = match score {
x if x >= 9 => "high",
x if x >= 5 => "mid",
_ => "low",
};
println!("{}", mark);
}
Дано число:
let n = 3;
Запишите разбор с защитой: при значении
больше нуля выведите "plus", иначе
"other".
Дано число:
let age = 17;
Сделайте две защищенные ветки для совершеннолетнего и для ребенка до восемнадцати, затем запасную, и выведите короткую метку.
Скажите, сработает ли ветка с защитой, если образец не совпал с значением, даже когда условие защиты истинно.