可変性
可変なデータは&mut Tで可変的に借用することができます。これ
可変参照と呼ばれ、借用した人に読み書きを許可します。
&Tは不変なデータの参照をとり、借用した人はデータの読み取りは
できても、変更はできません。
#[allow(dead_code)] #[derive(Clone, Copy)] struct Book { // `&'static str`は読み取り専用メモリに確保した文字列の参照 author: &'static str, title: &'static str, year: u32, } // この関数はbookの参照をとる fn borrow_book(book: &Book) { println!("I immutably borrowed {} - {} edition", book.title, book.year); } // この関数はbookのか変参照をとり、`year`を2014に変更する fn new_edition(book: &mut Book) { book.year = 2014; println!("I mutably borrowed {} - {} edition", book.title, book.year); } fn main() { // 不変なBook、`immutabook`を作る 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 ^ この行をコメントアウトする }