循环中的可变借用+返回

时间:2017-07-21 00:10:34

标签: rust

我有一段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);
}

playground link

它无法编译:

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超出范围(因此在它说之前返回)或者它返回(并且没有后续借用)。

有没有办法表达这个会编译?

0 个答案:

没有答案