fn some_number() -> Option
Some(42)
}
fn main() {
match some_number() {
// Вариант `Some`, выбираем, если его значение, привязанное к `n`,
// равно 42.
Some(n @ 42) => println!("Ответ: {}!", n),
// При других числах.
Some(n) => println!("Не интересно... {}", n),
// Для всего остального (вариант `None`).
_ => (),
}
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Функции, enum и Option
В некоторых случаях использование match выглядит неуклюже. Например:
#![allow(unused)]
fn main() {
let optional = Some(7);
match optional {
Some(i) => {
println!("Это очень большая строка и `{:?}`", i);
},
_ => {},
};
}
if let намного компактнее и выразительнее для данного случая и, кроме того, позволяет рассмотреть различные варианты ошибок.
fn main() {
// Все переменные типа `Option
let number = Some(7);
let letter: Option
let emoticon: Option
// Конструкция `if let` читает, как: "Если `let` деструктуризирует `number` в
// `Some(i)`, выполнить блок (`{}`).
if let Some(i) = number {
println!("Соответствует {:?}!", i);
}
// Если нужно указать, что делать, в случае ошибки, можно добавить else:
if let Some(i) = letter {
println!("Соответствует {:?}!", i);
} else {
// Ошибка деструктуризации. Переходим к обработке ошибки.
println!("Не соответствует числу. Давайте попробуем строку!");
}
// Добавляем ещё одну ситуацию несоответствия образцу.
let i_like_letters = false;
if let Some(i) = emoticon {
println!("Соответствует {:?}!", i);
// Оцените условие `else if`, чтобы увидеть,
// должна ли быть альтернативная ветка отказа:
} else if i_like_letters {
println!("Не соответствует числу. Давайте попробуем строку!");
} else {
// Рассматриваем ложное условие. Эта ветвь по умолчанию:
println!("Мне не нравится сравнивать строки. Давайте возьмём смайлик :)!");
}
}