如果我理解正确的话,在 Rust 中,重借的生命周期必须比它重借的生命周期短:
let mut x = ...;
let m1 = &mut x;
let m2 = &mut *m;
let m3 = m1; // m1 moved here
let m4 = m2; // use m2 here
Run Code Online (Sandbox Code Playgroud)
移动m1到m3会触发错误,因为m1是 借用的m2,稍后会使用。
但是,在这种情况下,超出范围的行为有所不同,如下所示:
let mut x = ...;
let m2 : &mut ...;
{
let m1 = &mut x;
m2 = &mut *m1;
} // m1 drop out of scope here
let m4 = m2; // use m2 …Run Code Online (Sandbox Code Playgroud)