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

// Замыкания анонимны. Тут мы связываем их с ссылками

// Аннотация идентичны аннотации типов функции, но является опциональной

// как и оборачивания тела в `{}`. Эти безымянные функции

// назначены соответствующе названным переменным.

let closure_annotated = |i: i32| -> i32 { i + 1 };

let closure_inferred = |i | i + 1 ;

let i = 1;

// Вызов функции и замыкания.

println!("функция: {}", function(i));

println!("замыкание с указанием типа: {}", closure_annotated(i));

println!("замыкание с выводом типа: {}", closure_inferred(i));

// Замыкание не принимает аргументов, но возвращает `i32`.

// Тип возвращаемого значения выведен автоматически.

let one = || 1;

println!("замыкание, возвращающее один: {}", one());

}

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

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Захват

Замыкания довольно гибкие и делают всё, что требуется для работы с ними без дополнительных указаний. Это позволяет захватывать переменные перемещая их или заимствуя, в зависимости от необходимости. Замыкания могут захватывать переменные:

   • по ссылке: &T

   • по изменяемой ссылке: &mut T

   • по значению: T

Преимущественно, они захватывают переменные по ссылке, если явно не указан другой способ.

fn main() {

use std::mem;

let color = "green";

// Замыкание для вывода `color`, которое немедленно заимствует (`&`)

// `color` и сохраняет замыкание в переменной `print`. color` будет оставаться

// заимствованным до тех пор, пока `print` используется.

//

// `println!` принимает аргументы по неизменяемым ссылкам, поэтому он не накладывает

// дополнительных ограничений.

let print = || println!("`color`: {}", color);

// Вызываем замыкание, использующее заимствование.

print();

// `color` может быть неизменяемо заимствован, так как замыкание

// держит только неизменяемую ссылку на `color`.

let _reborrow = &color

print();

// Перемещение или перезанятие возможно после последнего использования `print`

let _color_moved = color;

let mut count = 0;

// Замыкание для увеличения `count` может принимать как `&mut count`, так и `count`,

// но использование `&mut count` менее ограничено, так что

// замыкание выбирает первый способ, т.е. немедленно заимствует `count`.

//

// inc` должен быть `mut`, поскольку внутри него хранится `&mut`.

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

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

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

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

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

Учебные пособия, самоучители
Теоретический минимум по Computer Science
Теоретический минимум по Computer Science

Хватит тратить время на скучные академические фолианты! Изучение Computer Science может быть веселым и увлекательным занятием.Владстон Феррейра Фило знакомит нас с вычислительным мышлением, позволяющим решать любые сложные задачи. Научиться писать код просто — пара недель на курсах, и вы «программист», но чтобы стать профи, который будет востребован всегда и везде, нужны фундаментальные знания. Здесь вы найдете только самую важную информацию, которая необходима каждому разработчику и программисту каждый день.«Эта книга пригодится и для решения повседневных задач. Упреждающая выборка и кэширование помогут сложить рюкзак, параллелизм облегчит готовку на кухне.Ну и, разумеется, ваш программный код будет просто потрясающим».Владстон Феррейра Фило

Владстон Феррейра Фило

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