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

Подобно замыканиям, явное использование времён жизни требует обобщённого параметра. Кроме того, такой синтаксис показывает, что время жизни foo не может превышать 'a. Явная аннотация для типа имеет форму &'a T, где 'a уже задана.

В случаях со множественными временами жизни, синтаксис будет подобен следующему:

foo<'a, 'b>

// `foo` имеет параметры времён жизни `'a` и `'b`

В данном случае, время жизни foo не может превышать ни 'a, ни 'b.

Рассмотрим следующий пример, в котором используется явная аннотация времён жизни:

// `print_refs` получает две ссылки на `i32`, имеющие различные

// времена жизни `'a` и `'b`. Оба этих времени жизни должны существовать

// не меньше, чем функция `print_refs`.

fn print_refs<'a, 'b>(x: &'a i32, y: &'b i32) {

println!("x равно {} и y равно {}", x, y);

}

// Функция, не имеющая аргументов, но имеющая параметр времени жизни `'a`.

fn failed_borrow<'a>() {

let _x = 12;

// ОШИБКА: `_x` не живёт достаточно долго (`_x` does not live long enough)

//let y: &'a i32 = &_x;

// Попытка использования времени жизни `'a` для явного аннотирования

// внутри функции приведёт к ошибке, так как время жизни у `&_x` короче, чем

// у `y`. Короткое время жизни не может быть приведено к длинному.

}

fn main() {

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

let (four, nine) = (4, 9);

// Заимствуем (`&`) обе переменные и передадим их в функцию.

print_refs(&four, &nine);

// Любой ввод, который заимствуется, должен жить дольше, чем заимствующий.

// Другими словами, время жизни `four` и `nine` должно

// быть больше, чем время жизни `print_refs`.

failed_borrow();

// `failed_borrow` не содержит ссылок, заставляющих `'a` быть

// больше, чем время жизни функции, но `'a` больше.

// Поскольку время жизни никогда не ограничено, оно, по умолчанию, равно `'static`.

}

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

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

1

сокрытие позволяет скрыть аннотации времён жизни, но они всё же присутствуют.

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

Обобщения и замыкания

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

Сигнатуры функции с указанием времени жизни имеют некоторые ограничения:

   • любая ссылка должна иметь аннотированное время жизни

   • любая возвращаемая ссылка должна иметь то же время жизни, что входящая ссылка или static.

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

// Одна входная ссылка со временем жизни `'a`, которая

// будет жить как минимум до конца функции.

fn print_one<'a>(x: &'a i32) {

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

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

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

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

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

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