Владение и заимствование

Rust Lifetimes Explained

Tell the compiler how long a returned reference stays valid with 'a.

  • Средний
  • Чтение: 3 мин
  • Примеров для запуска: 1
Что вы узнаете
  • What a lifetime is
  • Annotating with 'a
  • Lifetimes in structs
fn longest<'a>(a: &'a str, b: &'a str) -> &'a str
  1. 1a: &'a strinput
  2. 2b: &'a strinput
  3. 3-> &'a strvalid as long as both inputs

References must not outlive their data

A lifetime describes how long a reference is valid. Most of the time the compiler works it out. When a function returns a reference that could come from more than one parameter, you name the lifetime with 'a.

The signature of longest says that the result lives as long as both inputs do. subtitle is a string literal, which lives for the whole program, so result is still valid after the inner block. A struct that stores a reference needs a lifetime too.

Главное

  1. Most lifetimes are worked out by the compiler.
  2. 'a links the result to the inputs.
  3. A struct that stores a reference needs a lifetime.

Пример на Rust, который можно запустить

Rust
Запустить код →
main.rs
fn longest<'a>(a: &'a str, b: &'a str) -> &'a str {
    if a.len() >= b.len() {
        a
    } else {
        b
    }
}

struct Highlight<'a> {
    text: &'a str,
}

fn main() {
    let title = String::from("The Rust Book");
    let result;
    {
        let subtitle = "2021 edition";
        result = longest(&title, subtitle);
    }
    println!("longest: {result}");

    let highlight = Highlight { text: &title[4..8] };
    println!("highlight: {}", highlight.text);
}
Получить кнопку запуска для этого примера Результат выполнения
longest: The Rust Book
highlight: Rust

Практика

Откройте пример в онлайн-компиляторе, измените значение или добавьте строку и попробуйте предсказать вывод до запуска. Затем намеренно сломайте код и прочитайте сообщение компилятора.

Закончили этот урок?

Отметьте его как изученный, чтобы следить за прогрессом.

Далее: Smart Pointers: Box and Rc →

Попрактикуйтесь на задаче

Примените материал этого урока к реальной задаче. Каждая задача запускается в браузере, с мгновенными тестами и разбором от ИИ.

Все задачи