重新分配应该是循环中可变借用的不可变变量
Re-assignment of immutable variable that should be a mutable borrow in a loop
我试图在迭代时修改一个可变的 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 允许我从 sums
可变地借用 sum
,但编译器阻止我实际修改它。省略 .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
。
我试图在迭代时修改一个可变的 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 允许我从 sums
可变地借用 sum
,但编译器阻止我实际修改它。省略 .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
。