我怎样才能让编译器在我的 crate/file 中发出变量的生命周期?

How can I get the compiler to emit the lifetime(s) of variable(s) in my crate/file?

我知道你可以这样调用:

rustc -Z unstable-options --pretty=expanded

看看宏扩展,有没有类似的东西来显示 file/crate 中变量的生命周期?

我看到有一个 pretty=typed,但它并没有像显示所有内容的类型那样显示生命周期。

我可以看到一个显示生命周期的选项,这对新的 Rust 程序员(比如我)真的很有帮助。

生命周期有一个花哨的名字,但实际上它们并不是特别特别。事实上,您的源代码 已经显示了生命周期 !

fn example() {
    let v1 = Vec::new();

    {
        let v2 = Vec::new();
    } // v2 goes out of scope here

} // v1 goes out of scope here

项目的生命周期基本上只是源代码中变量有效的大括号。当你有两个项目时会有一点额外的复杂性,但它是一个简单的扩展:

fn example() {
    let v1 = Vec::new();  // | Lifetime of v1  
    let v2 = Vec::new();  // |                 | Lifetime of v2
}

在这个例子中,v1 的寿命比 v2 长一点,只有当你试图在另一个中引用一个时才真正重要:

fn example() {
    let mut v1 = vec![];    // | Lifetime of v1  
    let mut v2 = vec![()];  // |                | Lifetime of v2
    v1.push(&v2);           // |                |
}

在这里,v2 将在 之前 v1 被删除(有一个 LIFO 顺序删除),因此对 [=14= 的引用] 在删除 v2 和删除 v1 之间无效。

如果您对 通用生命周期参数 的交互方式更好奇,我建议您查看