以下の内容はhttps://r9.hateblo.jp/entry/2022/06/03/234820より取得しました。


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 here

For 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]



以上の内容はhttps://r9.hateblo.jp/entry/2022/06/03/234820より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14