1&mut で借りた値を書き換える
let mut の String に &mut で可変参照を作り、push_str で本体を書き換える最小の例です。最後の println! では持ち主の message から、変更が反映された値が読めています。「貸し先での変更が本体に及ぶ」のが、読み取り専用の & との決定的な違いです。
Rust
2関数に &mut を渡して書き換えてもらう
引数を &mut String で受ける関数に渡すと、呼び出し元の変数が直接書き換わる、という可変参照の実用形です。値を返してもらって入れ直す方式と違い、所有権は一度も手放していません。「加工は関数に任せ、データは手元に置いたまま」という分業がこの形で実現します。
Rust
3可変参照は同時に1つだけ
r1 を使い終えてから r2 を作れば連続して借用できるが、同時に2つの &mut は作れない、というルールを示す例です。コメントの2行を同時に生かすとコンパイルエラーになります。「書き換え中のデータに他から触らせない」ことで、データ競合をコンパイル時に締め出しています。
Rust
4数値は * で参照先に書き込む
i32 のような数値を &mut で借りた場合は、*score のようにアスタリスクを付けて「参照先の中身」に書き込む、という例です。String のメソッド呼び出しでは隠れていた「参照を経由して本体を触る」操作が、ここでは * として目に見えます。スコアやカウンタを関数で更新する場面の基本形です。
Rust
5在庫数の更新で見る可変参照
1つの在庫数を、入荷の restock と販売の sell という2つの関数が &mut で借りて更新していく実務寄りの例です。sell は *stock を読んで在庫不足を判定してから書き換えており、読み書き両方に可変参照を使っています。「状態は1か所、更新ロジックは関数に分割」という実務の構造を、可変参照が支えています。
Rust