如何增加向量中的每个数字而没有错误"不能一次多次借用可变的"?

sag*_*aga 2 vector rust borrow-checker

此代码应该将向量中的每个值递增1:

fn main() {
    let mut v = vec![2, 3, 1, 4, 2, 5];
    let i = v.iter_mut();
    for j in i {
        *j += 1;
        println!("{}", j);
    }
    println!("{:?}", &mut v);
}
Run Code Online (Sandbox Code Playgroud)

由于Rust的借用规则,它不起作用:

error[E0499]: cannot borrow `v` as mutable more than once at a time
 --> src/main.rs:8:27
  |
3 |     let i = v.iter_mut();
  |             - first mutable borrow occurs here
...
8 |     println!("{:?}", &mut v);
  |                           ^ second mutable borrow occurs here
9 | }
  | - first borrow ends here
Run Code Online (Sandbox Code Playgroud)

我怎样才能完成这项任务?

lje*_*drz 6

不要存储可变迭代器; 直接在循环中使用它:

fn main() {
    let mut v = vec![2, 3, 1, 4, 2, 5];

    for j in v.iter_mut() { // or for j in &mut v
        *j += 1;
        println!("{}", j);
    }

    println!("{:?}", &v); // note that I dropped mut here; it's not needed
}
Run Code Online (Sandbox Code Playgroud)