fn main() {
let mut x = 5;
let y = &mut x;
*y += 1;
println!("{}", x);
}
在这种情况下,编译器可以很容易地知道y已经完成了它的工作,因为在println
之后没有更多的代码,所以print x是安全的,为什么它还抱怨呢?
在以下代码片段中:
let y: &i32;
let x = 5;
y = &x;
println!("{}", y);
编译器应该知道结果println
是安全的并允许它;所以在这行代码之后,我可以重用y来执行y = &z;
。
1条答案
按热度按时间jvidinwx1#
你正在阅读的是一本很老的Rust书,在 *non-lexical lifetime * 被引入之前,那时编译器确实会拒绝这样的代码--它不看引用实际上何时不再使用,只看变量
y
的作用域在哪里结束。现在,在当前的Rust中,相同的代码被接受。您应该使用the current, official version of the book。