我正在迭代一个向量,我想改变其中一个元素。
fn main() {
let mut vector = vec![1, 2, 3, 4];
for (i, el) in vector.iter().enumerate() {
if i == 0 {
continue;
}
vector[i - 1] += el
}
}
这给了我编译错误:
error[E0502]: cannot borrow `vector` as mutable because it is also borrowed as immutable
--> src/main.rs:8:9
|
4 | for (i, el) in vector.iter().enumerate() {
| ------ immutable borrow occurs here
...
8 | vector[i - 1] += el
| ^^^^^^ mutable borrow occurs here
9 | }
| - immutable borrow ends here
我理解为什么会出现这种错误。我在枚举范围的生命周期中借用向量作为不可变的,然后尝试改变该范围内的内部,从而打破借用规则。我只是不明白如何正确地做到这一点。我想我需要为枚举提供可变的借用?
我尝试了mut
,&mut
的各种组合,我遇到了不同的编译错误。我知道我可以将它变为Vec<Cell<i32>>
并以这种方式改变内容,但对于这样一个简单的例子来说这似乎有些过分了。
答案 0 :(得分:2)
使用索引。
fn main() {
let mut vector = vec![1, 2, 3, 4];
for i in 1..vector.len() {
vector[i - 1] += vector[i];
}
println!("{:?}", vector);
}