Rust で配列の要素そのもので配列にアクセスしようとするとエラー
error[E0502]: cannot borrow `v` as immutable because it is also borrowed as mutable
エラーが出たのでメモ。
やりたいこと。
fn main() { let mut v: Vec<usize> = vec![3, 123, 234, 345, 456, 567]; v[v[0]] *= 100; // 要素 3 を 100 倍する println!("{:?}", v); }
起きたエラー。
error[E0502]: cannot borrow `v` as immutable because it is also borrowed as mutable
--> src/main.rs:3:7
|
3 | v[v[0]] *= 100;
| --^----
| | |
| | immutable borrow occurs here
| mutable borrow occurs here
| mutable borrow later used hereFor more information about this error, try `rustc --explain E0502`.
|
日本語意訳。
"v" はミュータブルとして借用されているので、イミュータブルとして借用できません。
いまひとつ理解に至らないが、v のベクタ自体がミュータブルな配列で、この再代入の式自体が mut の効果を持ち、添え字として取り出そうとした v[1] の部分がイミュータブルのアクセスとして取得しようとして、それで引っかかっている、ということか?
let (v1, v2) = (&mut v, &v); ってしたら同じように怒られるから、こんな感じか?
とりあえず別に束縛して暗黙コピーしたらちゃんと動いた。
let mut v: Vec<usize> = vec![3, 123, 234, 345, 456, 567]; let vv = v[0]; v[vv] *= 100; println!("{:?}", v); // [3, 123, 234, 34500, 456, 567]