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

<p id="Смотрите_также_19"><strong><a l:href="#Смотрите_также_19">Смотрите также:</a></strong></p>

Функции, enum и Option

<p id="if_let"><strong><a l:href="#if_let">if let</a></strong></p>

В некоторых случаях использование match выглядит неуклюже. Например:

#![allow(unused)]

fn main() {

// Создаём переменную `optional` типа `Option`

let optional = Some(7);

match optional {

Some(i) => {

println!("Это очень большая строка и `{:?}`", i);

// ^ Нужно 2 отступа только для того, чтобы извлечь `i`

},

_ => {},

// ^ Обязателен, так как `match` исчерпывающий. Не выглядит ли это

// как потерянное пространство?

};

}

if let намного компактнее и выразительнее для данного случая и, кроме того, позволяет рассмотреть различные варианты ошибок.

fn main() {

// Все переменные типа `Option`

let number = Some(7);

let letter: Option = None;

let emoticon: Option = None;

// Конструкция `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!("Мне не нравится сравнивать строки. Давайте возьмём смайлик :)!");

}

}

Перейти на страницу:

Похожие книги