이 경우 오류의 의미는 무엇입니까?
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;
}
놀랍게도, 이것은 완벽하게 작동합니다! 첫 번째 스 니펫은 왜 작동하지 않지만 두 번째 스 니펫은 작동합니까? 내가 문서를 이해하는 방식은 동일해야하지만 분명히 그렇지 않습니다.