Zusammenfassung – Druckbarer Punkt
Teil des Abschnitts Objektorientierte Programmierung der Rust-Journey von Coddy. Lektion 39 von 61.
Aufgabe
EinfachFühre alle Standard-Traits, die du kennengelernt hast, zusammen, indem du eine vollständig ausgestattete Point-Struktur erstellst, die debuggt, ansprechend dargestellt und auf Gleichheit verglichen werden kann!
Du organisierst deinen Code auf zwei Dateien verteilt:
point.rs: Definiere eine öffentlichePoint-Struktur mit öffentlichenx- undy-Feldern (beidei32). Deine Point-Struktur soll drei Fähigkeiten unterstützen:- Debug-Ausgabe mit
{:?}. Leite dies automatisch ab - Benutzerfreundliche Darstellung mit
{}im Format(x, y): Implementiere dies manuell mitstd::fmt::Display - Gleichheitsvergleich mit
==: LeitePartialEqab
- Debug-Ausgabe mit
main.rs: Binde dein point-Modul ein und erstelle mithilfe der bereitgestellten Eingaben zweiPoint-Instanzen. Demonstriere alle drei Fähigkeiten, indem du den ersten Punkt im Debug-Format ausgibst, den zweiten Punkt im Anzeigeformat ausgibst und vergleichst, ob die beiden Punkte gleich sind.
Deine Ausgabe sollte alle drei Trait-Fähigkeiten in Aktion zeigen:
Debug: Point { x: {x1}, y: {y1} }
Display: ({x2}, {y2})
Equal: {true/false}Zum Beispiel bei den Eingaben 3, 5, 3, 5:
Debug: Point { x: 3, y: 5 }
Display: (3, 5)
Equal: trueUnd bei den Eingaben 10, 20, 5, 15:
Debug: Point { x: 10, y: 20 }
Display: (5, 15)
Equal: falseDu erhältst vier Eingaben: die x- und y-Koordinaten des ersten Punkts, gefolgt von den x- und y-Koordinaten des zweiten Punkts. Parse jede Eingabe als i32.
Probier es selbst
mod point;
use point::Point;
fn main() {
// Lies vier Eingaben: 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 mit den 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 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