这里有一些我无法编译的代码:
struct HasVec {
vec: Vec<u8>,
}
fn get_or_make<'a>(container: &'a mut HasVec) -> &'a mut u8 {
let ref mut vec = container.vec;
{
for element in vec.iter_mut() {
if *element > 9 {
return element;
}
}
}
vec.push(10);
vec.last_mut().unwrap()
}
编译器的输出是:
error[E0499]: cannot borrow `*vec` as mutable more than once at a time
|
8 | for element in vec.iter_mut() {
| --- first mutable borrow occurs here
...
14 | vec.push(10);
| ^^^ second mutable borrow occurs here
15 | vec.last_mut().unwrap()
16 | }
| - first borrow ends here
error[E0499]: cannot borrow `*vec` as mutable more than once at a time
|
8 | for element in vec.iter_mut() {
| --- first mutable borrow occurs here
...
15 | vec.last_mut().unwrap()
| ^^^ second mutable borrow occurs here
16 | }
| - first borrow ends here
error[E0499]: cannot borrow `*vec` as mutable more than once at a time
|
8 | for element in vec.iter_mut() {
| --- first mutable borrow occurs here
...
15 | vec.last_mut().unwrap()
| ^^^ second mutable borrow occurs here
16 | }
| - first borrow ends here
借款是否应该在第13行的范围结束时结束?我还没有找到任何方法来重构那些能满足借用检查器的代码。将let ref mut vec = container.vec;
放在带有for循环的代码块内,而将另一个置于该块之后则不起作用,如果没有ref变量,也不会直接访问container.vec
。
我正在使用Rust 1.16.0。