我有一段Rust代码,简化后看起来像这样:
struct FooRef<'f>(&'f mut i32);
fn blah<'f>(f: &'f mut i32) -> FooRef<'f> {
let mut i = 0;
loop {
let fr = FooRef(f);
if i == *fr.0 {
return fr;
}
i += 1;
}
}
fn main() {
let mut f = 5;
blah(&mut f);
}
它无法编译:
error[E0499]: cannot borrow `*f` as mutable more than once at a time
--> test.rs:6:25
|
6 | let fr = FooRef(f);
| ^
| |
| second mutable borrow occurs here
| first mutable borrow occurs here
...
12 | }
| - first borrow ends here
如果我理解了这个错误,那就是说f
可以在一次循环迭代中借用函数结束,然后在第二次迭代时再次借用,这不起作用。
这对我来说似乎不对; fr
超出范围(因此在它说之前返回)或者它返回(并且没有后续借用)。
有没有办法表达这个会编译?