我不太明白为什么这段代码可以编译通过:
fn main() {
let mut v = vec![1,2,3];
for i in 1..v.len() {
v[i] = 20;
}
}
这样做可以,但这样不行:
fn main() {
let mut v = vec![1,2,3];
for (i,_) in v.iter().enumerate() {
v[i] = 20;
}
}
错误:
error[E0502]: cannot borrow `v` as mutable because it is also borrowed as immutable
--> src/main.rs:6:13
|
4 | for (i,_) in v.iter().enumerate() {
| --------------------
| |
| immutable borrow occurs here
| immutable borrow later used here
5 |
6 | v[i] = 20;
| ^ mutable borrow occurs here
在这两种情况下,我们都进行了不可变的借用(一次是调用 len()
,另一次是调用 iter()
)。
因此,我的期望是第一个代码片段不应该编译--当进行赋值时,我们正在进行可变借用,而存在不可变借用。
那么我有什么误解吗?