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

标签 rust mutable

我正在尝试修改一个可变的 sums: Vec<i64>在迭代它的同时。循环代码如下:

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

这对我来说似乎很神秘。 Rust 让我可变借用 sum来自 sums ,但编译器阻止我实际修改它。省略 .enumerate()甚至不会改变生成的错误代码。

我想知道如何修复循环。

最佳答案

我不知道您为什么决定将 &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

关于rust - 重新分配应该是循环中可变借用的不可变变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45036679/

相关文章:

vector - Rust 中的二维向量

rust - 如何以毫秒为单位获取当前时间?

python - 了解可变变量在不同范围内的行为方式

Swift struct 相当于 C++ 可变关键字?

rust - 在结构初始化程序中使用对新结构的引用

c++ - 如何创建指向可变成员的指针?

c++ - Ceres-Solver:剩余仿函数使用的可变变量是好的做法吗?还有什么其他选择?

macros - tt 元变量类型在 Rust 宏中意味着什么?

algorithm - 在二维坐标系下实现霍夫变换直线检测

arrays - 如何使用 ndarray 从向量的向量创建二维数组?