Rust 如何让编译器发出我的板条箱/文件中变量的生存期?

Rust 如何让编译器发出我的板条箱/文件中变量的生存期?,rust,Rust,我知道你可以这样称呼: rustc -Z unstable-options --pretty=expanded 要查看宏展开,是否有类似的内容来显示文件/板条箱中变量的生命周期 我看到有一个pretty=typed,但它并没有像显示所有事物的类型那样显示生命周期 我可以看到一个选项来显示生命周期对新的Rust程序员(比如我)真的很有帮助。生命周期有一个奇特的名字,但实际上它们并不是特别的。事实上,您的源代码已经显示了生命周期 项目的生存期基本上是在变量有效的源代码中,只有大括号。当您有两个项目

我知道你可以这样称呼:

rustc -Z unstable-options --pretty=expanded
要查看宏展开,是否有类似的内容来显示文件/板条箱中变量的生命周期

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


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

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

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

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
之前被删除(对删除有后进先出顺序),因此在
v2
被删除和
v1
被删除之间,对
v2
的引用将无效


如果您对泛型生存期参数如何交互更感兴趣,我建议您检查一下。

我觉得最简单的情况正如您所描述的,但也有其他情况您不知道为什么有些东西不起作用,如果能看到编译器认为生存期是什么,那就太好了。有些事情对我来说是模糊的:当某些东西被克隆时会发生什么?都是曲括号吗?在火柴堆里怎么样?是否有方法引用父生命周期?那么具有自定义生存期的结构/函数呢?等等。所以我理解简单的情况,我真的想确保我看到编译器在更复杂的情况下的想法。标记答案正确,因为此时似乎没有任何方法让编译器吐出生命周期,在大多数情况下,它似乎是不必要的。谢谢你的回答!
fn example() {
    let mut v1 = vec![];    // | Lifetime of v1  
    let mut v2 = vec![()];  // |                | Lifetime of v2
    v1.push(&v2);           // |                |
}