重新分配应该是循环中的可变借位的不可变变量

时间:2017-07-11 13:59:18

标签: rust mutable

我试图在迭代它时修改一个可变的for (j, &mut sum) in sums.iter_mut().enumerate() { if !(j == i) { sum += n; } } 。循环代码如下:

error[E0384]: re-assignment of immutable variable `sum`
  --> mini_max_sum.rs:27:17
   |
25 |         for (j, &mut sum) in sums.iter_mut().enumerate() {
   |                      --- first assignment to `sum`
26 |             if !(j == i) {
27 |                 sum += n;
   |                 ^^^^^^^^ re-assignment of immutable variable

这是我得到的错误:

sum

这对我来说似乎完全是神秘的。 Rust允许我从sums可变地借用.enumerate(),但编译器阻止我实际修改它。省略{{1}}甚至不会改变产生的错误代码。

我想知道如何修复循环。

1 个答案:

答案 0 :(得分:4)

我不知道为什么你决定将&mut添加到循环变量的模式中,但这就是问题所在。您需要直接获取可变引用,然后在递增时取消引用它:

fn main() {
    let mut sums = vec![1, 2, 3];
    let i = 0;
    let n = 0;

    for (j, sum) in sums.iter_mut().enumerate() {
        if j != i {
            *sum += n;
        }
    }
}

在模式中使用&mut,您实际上是对变量进行解构并删除可变引用。如果您print the type of your sum variable,您会发现它是i64