Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Неявное выведение времени жизни

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

  • Каждому аргументу, у которого нет аннотации времени жизни, присваивается отдельное время жизни.
  • Если есть только одно время жизни аргумента, оно присваивается всем неаннотированным заимствованиям в возвращаемом типе.
  • Если аргументов с временами жизни несколько, но первый из них — self, то его время жизни присваивается всем неаннотированным заимствованиям в возвращаемом типе.
// Copyright 2024 Google LLC
// SPDX-License-Identifier: Apache-2.0

fn only_args(a: &i32, b: &i32) {
    todo!();
}

fn identity(a: &i32) -> &i32 {
    a
}

struct Foo(i32);
impl Foo {
    fn get(&self, other: &i32) -> &i32 {
        &self.0
    }
}
This slide should take about 5 minutes.
  • Пройдите применение правил опускания времён жизни к каждой из функций-примеров. only_args дополняется первым правилом, identity — вторым, а Foo::get — третьим.

  • Если после применения трёх правил опускания не все времена жизни заполнены, компилятор выдаст ошибку и предложит добавить аннотации вручную.