Dev Study
Rust コース

46. RefCell<T> — 実行時に借用を検査する

RefCell<T> は借用ルールの検査をコンパイル時ではなく実行時に行う型です。borrow() で読み取りの借用、borrow_mut() で書き換えの借用を取り出せて、let mut なしの変数の中身でも書き換えられます。これを「内部可変性」と呼びます。

「外から見れば読み取り専用だが、内部でカウンタやキャッシュを更新したい」という場面や、読み取り共有しかできない Rc の中身を書き換えたいときに使います。借用チェッカーには正しいと証明できないが、人間にはルールを守れていると分かるコードの逃げ道です。

検査が実行時に移るだけで、「書き換えの借用は同時に1つ」のルール自体は変わりません。borrow() で借りたまま borrow_mut() を呼ぶと、コンパイルエラーではなく実行時の panic になる点が最大の注意点です。

▶ サンプルコードを実行してみよう(自由に書き換えてOK)

Rust
サンプルコードで身につける(5本) →

学んだ概念を、素朴な例から実務寄りの例まで5つの具体例で確認します。

公式ドキュメントで詳しく ↗