Zusammenfassung – Smart Pointer Mock
Teil des Abschnitts Object Oriented Programming der Rust-Journey von Coddy — Lektion 58 von 61.
Aufgabe
EinfachLassen Sie uns einen Smart-Pointer-Mock namens SmartBox bauen, der demonstriert, wie die tatsächlichen Smart-Pointer von Rust unter der Haube funktionieren! Ihr Wrapper wird generisch sein, Zugriff auf seinen inneren Wert bieten und automatisch ankündigen, wenn er bereinigt wird.
Sie werden Ihren Code über zwei Dateien organisieren:
smart_box.rs: Definieren Sie ein öffentliches generisches StructSmartBox<T>mit einem einzigen Feldvaluevom TypT. Implementieren Sie eine assoziierte Funktionnew, die eine SmartBox erstellt und eine Erstellungsnachricht ausgibt. Fügen Sie eineget-Methode hinzu, die eine Referenz auf den inneren Wert zurückgibt. Implementieren Sie schließlich dasDrop-Trait, um eine Bereinigungsnachricht auszugeben, wenn die SmartBox den Gültigkeitsbereich verlässt.main.rs: Binden Sie Ihr smart_box-Modul ein und demonstrieren Sie Ihre SmartBox mit zwei verschiedenen Typen. Erstellen Sie eineSmartBox<i32>, die eine Zahl hält, und eineSmartBox<String>, die Text hält (beide aus den bereitgestellten Eingaben). Geben Sie die Werte mit Ihrerget-Methode aus. Die Drop-Nachrichten erscheinen automatisch, wenn die Boxen am Ende von main den Gültigkeitsbereich verlassen.
Wenn eine SmartBox erstellt wird, sollte sie Folgendes ausgeben:
SmartBox createdWenn auf den Wert zugegriffen wird, geben Sie ihn in diesem Format aus:
Value: {value}Wenn eine SmartBox verworfen (dropped) wird, sollte sie Folgendes ausgeben:
SmartBox droppedZum Beispiel mit den Eingaben 42 und Hello:
SmartBox created
SmartBox created
Value: 42
Value: Hello
SmartBox dropped
SmartBox droppedBeachten Sie, wie beide Boxen zuerst erstellt werden, dann auf ihre Werte zugegriffen wird und schließlich beide in umgekehrter Reihenfolge (zuletzt erstellt, zuerst verworfen) verworfen werden, wenn main endet.
Sie erhalten zwei Eingaben: einen ganzzahligen Wert (als i32 parsen) und einen String-Wert.
Probier es selbst
mod smart_box;
use smart_box::SmartBox;
fn main() {
// Eingaben lesen
let mut input1 = String::new();
std::io::stdin().read_line(&mut input1).expect("Failed to read line");
let number: i32 = input1.trim().parse().expect("Failed to parse number");
let mut input2 = String::new();
std::io::stdin().read_line(&mut input2).expect("Failed to read line");
let text = input2.trim().to_string();
// TODO: Erstelle eine SmartBox<i32>, die die Zahl enthält
// TODO: Erstelle eine SmartBox<String>, die den Text enthält
// TODO: Gib die Werte mit der get-Methode aus
// Format: "Value: {value}"
// Die Drop-Nachrichten erscheinen automatisch, wenn main endet
}
Alle Lektionen in Object Oriented Programming
1Methoden und Verhalten
Einführung in ImplementierungsblöckeDer Self-ParameterVeränderliche MethodenAssoziierte FunktionenMehrere ImplementierungsblöckeMethod ChainingRückblick – Rechteck-Aktionen4Projekt: Virtuelles Haustier
Das Haustier definierenDas Haustier füttern7Standard-Traits
Das Debug-TraitDas Display-TraitClone und CopyGleichheits-TraitsZusammenfassung – Druckbarer Punkt10Projekt: Dokumentensystem
Das Draw-TraitText-Komponente2Kapselung und Module
Grundlagen der ModuleDas Public-SchlüsselwortPrivate FelderGetterSetterWiederholung – Sicherer Tresor5Generics
Generische StructsGenerische MethodenMehrere generische TypenGenerische FunktionenZusammenfassung - Koordinatenpunkt8Traits als Einschränkungen
Syntax für Trait BoundsMehrfache BoundsDie Where-KlauselTypen mit Traits zurückgebenRückblick – Generischer Drucker11Design Patterns in Rust
Newtype-PatternKompositionDas Drop-TraitFrom und IntoZusammenfassung – Smart Pointer Mock3Fortgeschrittene Enums
Enums mit DatenMethoden für EnumsMatching von DatenvariantenDas Option-Enum erneut betrachtetZusammenfassung – Shape-Enum6Definition von Traits
Was ist ein Trait?Traits implementierenStandardimplementierungenStandardimplementierungen überschreibenTraits mit ParameternZusammenfassung – Media Player