Bibliothekskatalog
Teil des Abschnitts Object Oriented Programming der Rust-Journey von Coddy — Lektion 60 von 61.
Aufgabe
EinfachLassen Sie uns ein Bibliothekskatalogsystem erstellen, das zeigt, wie Traits verschiedene Typen unter einer gemeinsamen Schnittstelle vereinen! Sie werden einen Katalog erstellen, in dem Bücher und Zeitschriften – obwohl sie unterschiedliche Eigenschaften haben – sich alle über einen gemeinsamen Trait selbst beschreiben können.
Sie werden Ihren Code über drei Dateien organisieren:
catalog.rs: Definieren Sie denCatalogItemTrait mit einer einzigen Methodedescription, die einenStringzurückgibt. Dieser Trait legt den Vertrag fest, den alle Bibliothekselemente erfüllen müssen.items.rs: Erstellen Sie zwei Structs, die Ihren Trait implementieren. EinBookhat einentitleund einenauthor(beides Strings), während einMagazineeinenname(String) und eineissueNummer (u32) hat. Jedes Struct sollteCatalogItemmit seinem eigenen, einzigartigen Beschreibungsformat implementieren.main.rs: Binden Sie beide Module ein und erstellen Sie Instanzen von Book und Magazine unter Verwendung der bereitgestellten Eingaben. Rufen Sie die Methodedescriptionfür jedes Element auf und geben Sie die Ergebnisse aus.
Ihre Book Beschreibung sollte diesem Format folgen:
Book: {title} by {author}Ihre Magazine Beschreibung sollte diesem Format folgen:
Magazine: {name}, Issue {issue}Zum Beispiel mit den Eingaben 1984, George Orwell, Nature und 42:
Book: 1984 by George Orwell
Magazine: Nature, Issue 42Und mit den Eingaben The Rust Book, Steve Klabnik, Science Weekly und 156:
Book: The Rust Book by Steve Klabnik
Magazine: Science Weekly, Issue 156Sie erhalten vier Eingaben: Buchtitel, Buchautor, Name der Zeitschrift und Ausgabennummer der Zeitschrift (parsen Sie die letzte als u32).
Probier es selbst
mod catalog;
mod items;
use catalog::CatalogItem;
use items::{Book, Magazine};
fn main() {
// Eingaben lesen
let mut book_title = String::new();
std::io::stdin().read_line(&mut book_title).expect("Failed to read line");
let book_title = book_title.trim().to_string();
let mut book_author = String::new();
std::io::stdin().read_line(&mut book_author).expect("Failed to read line");
let book_author = book_author.trim().to_string();
let mut magazine_name = String::new();
std::io::stdin().read_line(&mut magazine_name).expect("Failed to read line");
let magazine_name = magazine_name.trim().to_string();
let mut issue_input = String::new();
std::io::stdin().read_line(&mut issue_input).expect("Failed to read line");
let magazine_issue: u32 = issue_input.trim().parse().expect("Failed to parse issue number");
// TODO: Erstelle eine Book-Instanz unter Verwendung von book_title und book_author
// TODO: Erstelle eine Magazine-Instanz unter Verwendung von magazine_name und magazine_issue
// TODO: Rufe description() für jedes Element auf und gib die Ergebnisse 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 Player