Читаем Rust на примерах полностью

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

}

}

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

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

Компьютерные сети. 6-е изд.
Компьютерные сети. 6-е изд.

Перед вами шестое издание самой авторитетной книги по современным сетевым технологиям, написанное признанным экспертом Эндрю Таненбаумом в соавторстве со специалистом компании Google Дэвидом Уэзероллом и профессором Чикагского университета Ником Фимстером. Первая версия этого классического труда появилась на свет в далеком 1980 году, и с тех пор каждое издание книги неизменно становилось бестселлером. В книге последовательно изложены основные концепции, определяющие современное состояние компьютерных сетей и тенденции их развития. Авторы подробно объясняют устройство и принципы работы аппаратного и программного обеспечения, рассматривают все аспекты и уровни организации сетей — от физического до прикладного. Изложение теоретических принципов дополняется яркими, показательными примерами функционирования интернета и компьютерных сетей различного типа. Большое внимание уделяется сетевой безопасности. Шестое издание полностью переработано с учетом изменений, произошедших в сфере сетевых технологий за последние годы, и, в частности, освещает такие технологии, как DOCSIS, 4G и 5G, беспроводные сети стандарта 802.11ax, 100-гигабитные сети Ethernet, интернет вещей, современные транспортные протоколы CUBIC TCP, QUIC и BBR, программно-конфигурируемые сети и многое другое.

Дэвид Уэзеролл , Ник Фимстер , Эндрю Таненбаум

Учебные пособия, самоучители