simple-web-system technology

Webに関する技術をシンプルに扱うブログ

rustでvectorの値をiteratorで変更するときは、iter_mut()を使う

背景

rustでvectorに入ってるstructをiter().find()で取得して、その値を変更しようとしたんだけど 取り出した値にmutとかつけてもコンパイルエラーで動かなかった

ネットであまり見つからないのでメモ代わりに残す

正解

以下のようにすればよかった

// 正解
if let Some(data) = list.iter_mut().find(|data| data.id == id) {
  // この中で変更処理
}

// 間違い
if let Some(data) = list.iter().find(|data| data.id == id) {
  let data_mut = mut data;
  // こうしても後続の処理でコンパイルエラー
}