在这种情况下,错误意味着什么:
fn main() {
let mut v: Vec<usize> = vec![1, 2, 3, 4, 5];
v[v[1]] = 999;
}
error[E0502]: cannot borrow `v` as immutable because it is also borrowed as mutable
--> src/main.rs:3:7
|
3 | v[v[1]] = 999;
| --^----
| | |
| | immutable borrow occurs here
| mutable borrow occurs here
| mutable borrow later used here
我发现索引是通过Index
和IndexMut
个特征实现的,v[1]
是*v.index(1)
的语法糖.有了这些知识,我试着运行以下代码:
use std::ops::{Index, IndexMut};
fn main() {
let mut v: Vec<usize> = vec![1, 2, 3, 4, 5];
*v.index_mut(*v.index(1)) = 999;
}
令我惊讶的是,这项工作完美无瑕!为什么第一个片段不起作用,而第二个片段起作用?按照我对文档的理解,它们应该是等效的,但事实显然并非如此.