给定一个包含引用x的可变变量。当我用指向本地变量的引用替换其内容,并且在本地变量超出范围之前将其替换回原始值。
以下是展示这一点的代码:
struct X {payload : i32}
fn main() {
let pl = X{payload : 44};
{
let mut x = &pl;
{
let inner = X{payload : 30};
let tmp = std::mem::replace(&mut x, &inner);
println! ("data ={:?}", x.payload);
let _f = std::mem::replace(&mut x, &tmp);
}
println! ("data ={:?}", x.payload);
}
}
错误信息为:
error[E0597]: `inner` does not live long enough
--> src/main.rs:9:49
|
9 | let tmp = std::mem::replace(&mut x, &inner);
| ^^^^^^ borrowed value does not live long enough
...
12 | }
| - `inner` dropped here while still borrowed
13 | println! ("data ={:?}", x.payload);
| --------- borrow later used here
For more information about this error, try `rustc --explain E0597`.
当我将 inner
的引用赋值给 x
时,编译器会注意到这一点,但忽略了在 inner
仍然存在的情况下,我再次将此引用替换为原始的 pl
。
期望的输出应该是:
data =30
data =44
我做错了什么?