Zusammenfassung – Druckbarer Punkt
Teil des Abschnitts Object Oriented Programming der Rust-Journey von Coddy — Lektion 39 von 61.
Aufgabe
EinfachLassen Sie uns alle Standard-Traits, die Sie gelernt haben, zusammenführen, indem wir eine voll funktionsfähige Point-Struktur erstellen, die debuggt, ansprechend angezeigt und auf Gleichheit verglichen werden kann!
Sie werden Ihren Code über zwei Dateien organisieren:
point.rs: Definieren Sie eine öffentlichePoint-Struktur mit öffentlichenx- undy-Feldern (beidei32). Ihr Point sollte drei Fähigkeiten unterstützen:- Debug-Ausgabe mit
{:?}— leiten Sie dies automatisch ab (derive) - Benutzerfreundliche Anzeige mit
{}im Format(x, y)— implementieren Sie dies manuell mitstd::fmt::Display - Gleichheitsvergleich mit
==— leiten SiePartialEqab
- Debug-Ausgabe mit
main.rs: Binden Sie Ihr Point-Modul ein und erstellen Sie zweiPoint-Instanzen unter Verwendung der bereitgestellten Eingaben. Demonstrieren Sie alle drei Fähigkeiten, indem Sie den ersten Punkt im Debug-Format ausgeben, den zweiten Punkt im Display-Format ausgeben und vergleichen, ob die beiden Punkte gleich sind.
Ihre Ausgabe sollte alle drei Trait-Fähigkeiten in Aktion zeigen:
Debug: Point { x: {x1}, y: {y1} }
Display: ({x2}, {y2})
Equal: {true/false}Zum Beispiel mit den Eingaben 3, 5, 3, 5:
Debug: Point { x: 3, y: 5 }
Display: (3, 5)
Equal: trueUnd mit den Eingaben 10, 20, 5, 15:
Debug: Point { x: 10, y: 20 }
Display: (5, 15)
Equal: falseSie erhalten vier Eingaben: die x- und y-Koordinaten für den ersten Punkt, gefolgt von den x- und y-Koordinaten für den zweiten Punkt. Parsen Sie jede als i32.
Probier es selbst
mod point;
use point::Point;
fn main() {
// Lies vier Eingaben ein: x1, y1, x2, y2
let mut input = String::new();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let x1: i32 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let y1: i32 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let x2: i32 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let y2: i32 = input.trim().parse().expect("Invalid input");
// TODO: Erstelle zwei Point-Instanzen unter Verwendung der Eingaben
// TODO: Gib den ersten Punkt im Debug-Format {:?} aus
// Format: "Debug: Point { x: ..., y: ... }"
// TODO: Gib den zweiten Punkt im Display-Format {} aus
// Format: "Display: (..., ...)"
// TODO: Vergleiche die beiden Punkte und gib das Ergebnis aus
// Format: "Equal: true" oder "Equal: false"
}
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