Rückblick – Zoo-Manager
Teil des Abschnitts Object Oriented Programming der Rust-Journey von Coddy — Lektion 48 von 61.
Aufgabe
EinfachLassen Sie uns einen Zoo-Manager bauen, der alle Konzepte zu Trait-Objekten zusammenführt, die Sie gelernt haben! Sie werden ein System erstellen, in dem verschiedene Tiere – jedes mit seinem eigenen einzigartigen Geräusch – in einer einzigen Sammlung gespeichert und nacheinander zum Sprechen gebracht werden können.
Sie werden Ihren Code über zwei Dateien organisieren:
animals.rs: Definieren Sie einen öffentlichenSpeak-Trait mit einerspeak-Methode, die&selfentgegennimmt und einenStringzurückgibt. Erstellen Sie dann drei öffentliche Structs –Dog,CatundBird– jeweils mit einem öffentlichenname-Feld (String). Implementieren Sie denSpeak-Trait für jedes Tier mit seinen charakteristischen Geräuschen:- Dog sollte
"{name} says: Woof!"zurückgeben - Cat sollte
"{name} says: Meow!"zurückgeben - Bird sollte
"{name} says: Tweet!"zurückgeben
- Dog sollte
main.rs: Binden Sie Ihr animals-Modul ein und erstellen Sie einen Zoo! Erstellen Sie einenVec<Box<dyn Speak>>, der unter Verwendung der bereitgestellten Eingaben jeweils einen Tier-Typ enthält. Fügen Sie diese in der folgenden Reihenfolge hinzu: zuerst Dog, dann Cat, dann Bird. Iterieren Sie schließlich durch Ihren Zoo und geben Sie das Geräusch jedes Tieres in einer eigenen Zeile aus.
Diese Herausforderung demonstriert die wahre Stärke von Trait-Objekten – drei völlig unterschiedliche Tier-Typen, die zusammen in einer Sammlung leben und jeder auf denselben speak()-Aufruf mit seinem eigenen, einzigartigen Verhalten reagiert.
Ihre Ausgabe sollte jedes Tier in der richtigen Reihenfolge sprechend anzeigen:
{dog_name} says: Woof!
{cat_name} says: Meow!
{bird_name} says: Tweet!Zum Beispiel mit den Eingaben Rex, Whiskers und Tweety:
Rex says: Woof!
Whiskers says: Meow!
Tweety says: Tweet!Sie erhalten drei Eingaben: den Namen des Hundes, den Namen der Katze und den Namen des Vogels.
Probier es selbst
mod animals;
use animals::{Speak, Dog, Cat, Bird};
fn main() {
// Eingabe für Tiernamen lesen
let mut dog_name = String::new();
std::io::stdin().read_line(&mut dog_name).expect("Failed to read line");
let dog_name = dog_name.trim().to_string();
let mut cat_name = String::new();
std::io::stdin().read_line(&mut cat_name).expect("Failed to read line");
let cat_name = cat_name.trim().to_string();
let mut bird_name = String::new();
std::io::stdin().read_line(&mut bird_name).expect("Failed to read line");
let bird_name = bird_name.trim().to_string();
// TODO: Erstelle einen Vec<Box<dyn Speak>> namens zoo
// Tiere in der Reihenfolge hinzufügen: zuerst Dog, dann Cat, dann Bird
// TODO: Iteriere durch den zoo und gib das Geräusch jedes Tieres aus
}
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 Player9Trait-Objekte
Dynamischer DispatchVektoren von TraitsIterieren über Trait-ObjekteRückblick – Zoo-Manager