可変性
可変データは &mut T を使用して可変に借用できます。これは _可変参照_と呼ばれ、借用者に読み書きアクセスを与えます。 対照的に、&T は不変参照を介してデータを借用し、 借用者はデータを読み取ることはできますが、変更することはできません。
#[allow(dead_code)] #[derive(Clone, Copy)] struct Book { // `&'static str` は読み取り専用メモリに割り当てられた文字列への参照です author: &'static str, title: &'static str, year: u32, } // この関数は本への参照を取ります fn borrow_book(book: &Book) { println!("I immutably borrowed {} - {} edition", book.title, book.year); } // この関数は可変な本への参照を取り、`year` を 2014 に変更します fn new_edition(book: &mut Book) { book.year = 2014; println!("I mutably borrowed {} - {} edition", book.title, book.year); } fn main() { // `immutabook` という名前の不変な Book を作成します let immutabook = Book { // 文字列リテラルは `&'static str` 型を持ちます author: "Douglas Hofstadter", title: "Gödel, Escher, Bach", year: 1979, }; // `immutabook` の可変なコピーを作成し、`mutabook` と呼びます let mut mutabook = immutabook; // 不変オブジェクトを不変に借用します borrow_book(&immutabook); // 可変オブジェクトを不変に借用します borrow_book(&mutabook); // 可変オブジェクトを可変として借用します new_edition(&mut mutabook); // エラー!不変オブジェクトを可変として借用することはできません new_edition(&mut immutabook); // FIXME ^ この行をコメントアウトしてください }