この場合のエラーの意味:
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;
}
驚いたことに、これは完璧に機能します!最初のスニペットが機能しないのに、2番目のスニペットは機能するのはなぜですか?私がドキュメントを理解する方法では、それらは同等であるはずですが、これは明らかにそうではありません。