如何让编译器在我的包/文件中发出变量的生命周期?

sbd*_*o85 4 rust

我知道你可以打电话给:

rustc -Z unstable-options --pretty=expanded
Run Code Online (Sandbox Code Playgroud)

看到宏扩展,是否有类似的东西显示文件/包中的变量的生命周期?

我看到有一个pretty=typed,但它没有显示生命周期,因为它显示了一切的类型.

我可以看到一个选项来显示生命周期对新的Rust程序员(比如我)非常有帮助.

She*_*ter 6

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

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

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

} // v1 goes out of scope here
Run Code Online (Sandbox Code Playgroud)

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

fn example() {
    let v1 = Vec::new();  // | Lifetime of v1  
    let v2 = Vec::new();  // |                 | Lifetime of v2
}
Run Code Online (Sandbox Code Playgroud)

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

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

这里,v2将被丢弃 v1(有一个LIFO订货到滴),因此参考v2会时之间无效v2被丢弃,v1被丢弃.

如果您对通用生命周期参数的相互作用更加好奇,我建议您查看这个答案.