Zusammenfassung – Smart Pointer Mock
Teil des Abschnitts Objektorientierte Programmierung der Rust-Journey von Coddy. Lektion 58 von 61.
Aufgabe
EinfachErstellen wir einen Smart-Pointer-Mock namens SmartBox, der demonstriert, wie die tatsächlichen Smart-Pointer von Rust unter der Haube funktionieren! Deine Wrapper-Struktur wird generisch sein, Zugriff auf ihren inneren Wert ermöglichen und automatisch ankündigen, wenn sie bereinigt wird.
Du organisierst deinen Code über zwei Dateien:
smart_box.rs: Definiere eine öffentliche generische StrukturSmartBox<T>mit einem einzigen Feldvaluevom TypT. Implementiere eine zugehörige Funktionnew, die eine SmartBox erstellt und eine Erstellungsmeldung ausgibt. Füge eine Methodegethinzu, die eine Referenz auf den inneren Wert zurückgibt. Implementiere schließlich das MerkmalDrop, um eine Bereinigungsmeldung auszugeben, wenn die SmartBox ihren Gültigkeitsbereich verlässt.main.rs: Binde dein Modul smart_box ein und demonstriere deine SmartBox mit zwei verschiedenen Typen. Erstelle eineSmartBox<i32>, die eine Zahl enthält, und eineSmartBox<String>, die Text enthält (beides aus den bereitgestellten Eingaben). Gib die Werte mithilfe deinerget-Methode aus. Die Drop-Meldungen erscheinen automatisch, wenn die Boxen am Ende von main ihren Gültigkeitsbereich verlassen.
Wenn eine SmartBox erstellt wird, sollte sie Folgendes ausgeben:
SmartBox createdBeim Zugriff auf den Wert gib ihn in diesem Format aus:
Value: {value}Wenn eine SmartBox verworfen wird, sollte sie Folgendes ausgeben:
SmartBox droppedBeispielsweise mit den Eingaben 42 und Hello:
SmartBox created
SmartBox created
Value: 42
Value: Hello
SmartBox dropped
SmartBox droppedBeachte, dass zunächst beide Boxen erstellt werden, anschließend auf ihre Werte zugegriffen wird und schließlich beide in umgekehrter Reihenfolge (zuletzt erstellt, zuerst verworfen) verworfen werden, wenn main endet.
Du erhältst zwei Eingaben: einen Ganzzahlwert (als i32 parsen) und einen Zeichenkettenwert.
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 Objektorientierte Programmierung
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Übe selbstständig: Online-Rust-Compiler