Lebensdauerverwaltung in Rust Structs

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 haben wir einige Rust-Code, der die Verwendung von Lebensdauern in Structs demonstriert. Der Code enthält ein Struct namens Borrowed, das eine Referenz auf ein i32 aufnimmt, und die Referenz muss die Lebensdauer des Structs selbst überdauern. Es gibt auch ein Struct namens NamedBorrowed mit zwei Referenzen auf i32, von denen beide die Lebensdauer des Structs überdauern müssen. Darüber hinaus gibt es eine Enumeration namens Either, die entweder ein i32 oder eine Referenz auf eines sein kann, und die Referenz muss die Lebensdauer der Enumeration überdauern. Schließlich erstellt der Code Instanzen dieser Structs und Enumeration und druckt deren Inhalte aus, um die Verwendung von Lebensdauern in Rust zu 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.

Structs

Die Angabe von Lebensdauern in Strukturen ähnelt auch der von Funktionen:

// Ein Typ `Borrowed`, der eine Referenz auf ein
// `i32` enthält. Die Referenz auf `i32` muss die Lebensdauer von `Borrowed` überdauern.
#[derive(Debug)]
struct Borrowed<'a>(&'a i32);

// Ebenso müssen hier beide Referenzen die Lebensdauer dieser Struktur überdauern.
#[derive(Debug)]
struct NamedBorrowed<'a> {
    x: &'a i32,
    y: &'a i32,
}

// Eine Enumeration, die entweder ein `i32` oder eine Referenz auf eines ist.
#[derive(Debug)]
enum Either<'a> {
    Num(i32),
    Ref(&'a i32),
}

fn main() {
    let x = 18;
    let y = 15;

    let single = Borrowed(&x);
    let double = NamedBorrowed { x: &x, y: &y };
    let reference = Either::Ref(&x);
    let number    = Either::Num(y);

    println!("x wird in {:?} entliehen", single);
    println!("x und y werden in {:?} entliehen", double);
    println!("x wird in {:?} entliehen", reference);
    println!("y wird *nicht* in {:?} entliehen", number);
}

Zusammenfassung

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