Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

可変性

可変データは &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 ^ この行をコメントアウトしてください
}

関連項目:

static