Ownership và borrowing

Rust Lifetimes Explained

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

  • Trung cấp
  • Đọc trong 3 phút
  • 1 ví dụ chạy được
Bạn sẽ học được gì
  • 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.

Những điểm quan trọng

  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.

Ví dụ Rust chạy được

Rust
Chạy code →
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);
}
Lấy nút Run cho ví dụ này Kết quả khi chạy
longest: The Rust Book
highlight: Rust

Luyện tập

Mở ví dụ trong trình biên dịch online, đổi một giá trị hoặc thêm một dòng, rồi đoán kết quả trước khi chạy. Sau đó cố ý làm code bị lỗi và đọc thông báo của trình biên dịch.

Bạn học xong bài này chưa?

Đánh dấu đã học để theo dõi tiến độ của bạn.

Luyện tập với thử thách

Áp dụng kiến thức của bài học này để giải một bài toán thực tế. Mỗi thử thách chạy ngay trên trình duyệt, có kiểm thử tức thì và AI nhận xét.

Tất cả thử thách