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

时间:2015-05-25 22:20:10

标签: rust

我知道你可以打电话:

rustc -Z unstable-options --pretty=expanded

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

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

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

1 个答案:

答案 0 :(得分:6)

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

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排序),因此对v2的引用无效删除v2并删除v1时。

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