在这种情况下,这个错误是什么意思:
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
traits实现了索引,并且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;
}
令我惊讶的是,这个方法完美地运行起来了!为什么第一个代码片段不起作用,但第二个可以?按照文档的理解,它们应该是等效的,但显然情况并非如此。