我正在遍历一个向量,想要改变其中的一个元素。
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>>
并以此方式修改内容,但对于这样一个简单的示例来说,这似乎有点过度设计了。