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.rsverwenden und es mitrustc main.rs &&./mainkompilieren 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.