Mutables Entleihen im Rust Buch

RustRustBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab untersuchen wir die Veränderbarkeit in Rust, indem wir das Konzept des Entleihens von Daten über änderbare und nicht änderbare Referenzen am Beispiel einer Buchstruktur mit Funktionen betrachten, die das Verhalten des änderbaren und nicht änderbaren Entleihens demonstrieren.

Hinweis: Wenn das Lab keinen Dateinamen angibt, können Sie einen beliebigen Dateinamen verwenden. Beispielsweise können Sie main.rs verwenden und es mit rustc main.rs &&./main kompilieren und ausführen.

Veränderbarkeit

Änderbare Daten können über &mut T änderbar entliehen werden. Dies wird als änderbare Referenz bezeichnet und gibt dem Entleiher Lese-/Schreibzugang. Im Gegensatz dazu entleiht &T die Daten über eine nicht änderbare Referenz, und der Entleiher kann die Daten lesen, aber nicht modifizieren:

#[allow(dead_code)]
#[derive(Clone, Copy)]
struct Book {
    // `&'static str` ist eine Referenz auf einen in nur lesbarer Speicher zugewiesenen String
    author: &'static str,
    title: &'static str,
    year: u32,
}

// Diese Funktion nimmt eine Referenz auf ein Buch entgegen
fn borrow_book(book: &Book) {
    println!("Ich habe {} - {} Auflage unveränderlich entliehen", book.title, book.year);
}

// Diese Funktion nimmt eine Referenz auf ein änderbares Buch entgegen und ändert `year` auf 2014
fn new_edition(book: &mut Book) {
    book.year = 2014;
    println!("Ich habe {} - {} Auflage änderbar entliehen", book.title, book.year);
}

fn main() {
    // Erzeuge ein unveränderliches Buch namens `immutabook`
    let immutabook = Book {
        // Stringliterale haben den Typ `&'static str`
        author: "Douglas Hofstadter",
        title: "Gödel, Escher, Bach",
        year: 1979,
    };

    // Erzeuge eine änderbare Kopie von `immutabook` und nenne es `mutabook`
    let mut mutabook = immutabook;

    // Entleihe ein unveränderliches Objekt unveränderlich
    borrow_book(&immutabook);

    // Entleihe ein änderbares Objekt unveränderlich
    borrow_book(&mutabook);

    // Entleihe ein änderbares Objekt als änderbar
    new_edition(&mut mutabook);

    // Fehler! Ein unveränderliches Objekt kann nicht als änderbar entliehen werden
    new_edition(&mut immutabook);
    // FIXME ^ Kommentiere diese Zeile aus
}

Zusammenfassung

Herzlichen Glückwunsch! Sie haben das Lab zu Veränderbarkeit abgeschlossen. Sie können in LabEx weitere Labs ausprobieren, um Ihre Fähigkeiten zu verbessern.