教程 rust tutorial

生命周期 lifetimes

Rust 中,生命周期(lifetimes)用于标注引用的有效范围,确保所有引用在使用时都指向有效数据。

生命周期标注

使用泛型参数和 'a 语法标注生命周期:

rust
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
    if x.len() > y.len() {
        x
    } else {
        y
    }
}

此函数要求输入参数和返回值的生命周期一致,避免返回悬垂引用。

生命周期省略规则

Rust 编译器会在某些场景自动推断生命周期,简化代码:

  • 每个引用参数都有自己的生命周期。
  • 如果只有一个输入生命周期,返回值会自动采用该生命周期。

生命周期应用场景

rust
fn main() {
    let string1 = String::from("abcd");
    let string2 = "xyz";

    let result = longest(string1.as_str(), string2);
    println!("最长的字符串是 {}", result);
}

如果省略生命周期,编译器会报错,因为无法确定返回引用的有效期。

生命周期与结构体

结构体中包含引用时也需标注生命周期:

rust
struct ImportantExcerpt<'a> {
    part: &'a str,
}

Rust Playground
打开运行
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
    if x.len() > y.len() {
        x
    } else {
        y
    }
}

fn main() { let string1 = String::from("abcd"); let string2 = "xyz";

let result = longest(string1.as_str(), string2);
println!(&quot;最长的字符串是 {}&quot;, result);

}