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

הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

enum, Option, и RFC

<p id="while_let"><strong><a l:href="#while_let">while let</a></strong></p>

Так же, как иif let, while let может сделать неудобный match более терпимым. Рассмотрим следующий пример, в котором мы увеличиваем значение i:

#![allow(unused)]

fn main() {

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

let mut optional = Some(0);

// Неоднократно повторим наш тест.

loop {

match optional {

// Если `optional` деструктурируется, выполним следующий блок.

Some(i) => {

if i > 9 {

println!("Больше 9, уходим отсюда!");

optional = None;

} else {

println!("`i` равен `{:?}`. Попробуем еще раз.", i);

optional = Some(i + 1);

}

// ^ Требует 3 уровня вложенности!

},

// Выходим из цикла в случаи ошибки деструктуризации:

_ => { break; }

// ^ Зачем это нужно? Должен быть способ сделать это лучше!

}

}

}

Использование while let делает этот пример немного приятнее:

fn main() {

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

let mut optional = Some(0);

// Это можно прочитать так: "Пока `let` деструктурирует `optional` в

// `Some(i)`, выполняем блок (`{}`). В противном случае `break`.

while let Some(i) = optional {

if i > 9 {

println!("Больше 9, уходим отсюда!");

optional = None;

} else {

println!("`i` равен `{:?}`. Попробуем ещё раз.", i);

optional = Some(i + 1);

}

// ^ Меньше смещаемся вправо, к тому же

// нет необходимости обрабатывать ошибки.

}

// ^ К `if let` можно добавить дополнительный блок `else`/`else if`

// `while let` подобного нет.

}

הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

enum, Option, and the RFC

<p id="Функции"><strong><a l:href="#Функции">Функции</a></strong></p>

Функции объявляются с помощью ключевого слова fn. Их аргументы имеют явно заданный тип, как у переменных, и, если функция возвращает значение, возвращаемый тип должен быть указан после стрелки ->.

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

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

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

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

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

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