この記事はRust 0.10を基準に書かれている 前提 Rustの基本として、明示的にmutを付けて値の変更を可能にした(mutableにした)データ以外は変更することができない(デフォルトimmutableの原則とでも呼ぶべきかな)。これを構造体に適用した場合、構造体のフィールドのmutabilityは、フィールドを保持する構造体のそれを引き継ぐ。つまり、親のmutabilityを子は引き継ぐという原則がある。 なので、こういう感じのコード(疑似コードです)はコンパイルエラーになる。 let bar = Bar { bar: Hoge { hoge: 0 }, barbar: 0, }; // `bar`はimmutable bar.barbar = 1; // `bar.hoge`は`bar`のmutabilityを継承するので変更できない bar.hoge.hoge = 1; まあ詳