Riepilogo - Punto stampabile
Fa parte della sezione Programmazione orientata agli oggetti del percorso Rust di Coddy. Lezione 39 di 61.
Sfida
FacileMettiamo insieme tutti i trait standard che hai imparato creando una struct Point completa, che può essere formattata per il debug, visualizzata in modo elegante e confrontata per verificare l'uguaglianza!
Organizzerai il codice in due file:
point.rs: definisci una structPointpubblica con i campixeypubblici (entrambii32). La tua struct Point dovrebbe supportare tre funzionalità:- Stampa di debug con
{:?}. Deriva questo trait automaticamente - Visualizzazione intuitiva con
{}nel formato(x, y): implementala manualmente usandostd::fmt::Display - Confronto di uguaglianza con
==: derivaPartialEq
- Stampa di debug con
main.rs: importa il modulo point e crea due istanze diPointusando gli input forniti. Dimostra tutte e tre le funzionalità stampando il primo punto con il formato di debug, stampando il secondo punto con il formato di visualizzazione e confrontando se i due punti sono uguali.
L'output dovrebbe mostrare tutte e tre le funzionalità dei trait in azione:
Debug: Point { x: {x1}, y: {y1} }
Display: ({x2}, {y2})
Equal: {true/false}Ad esempio, con gli input 3, 5, 3, 5:
Debug: Point { x: 3, y: 5 }
Display: (3, 5)
Equal: trueE con gli input 10, 20, 5, 15:
Debug: Point { x: 10, y: 20 }
Display: (5, 15)
Equal: falseRiceverai quattro input: le coordinate x e y del primo punto, seguite dalle coordinate x e y del secondo punto. Analizza ciascun valore come i32.
Provalo tu
mod point;
use point::Point;
fn main() {
// Leggi quattro valori in input: 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: Crea due istanze di Point usando i valori in input
// TODO: Stampa il primo punto usando il formato di debug {:?}
// Formato: "Debug: Point { x: ..., y: ... }"
// TODO: Stampa il secondo punto usando il formato di visualizzazione {}
// Formato: "Display: (..., ...)"
// TODO: Confronta i due punti e stampa il risultato
// Formato: "Equal: true" o "Equal: false"
}
Tutte le lezioni di Programmazione orientata agli oggetti
1Metodi e comportamento
Introduzione ai blocchi implIl parametro selfMetodi mutabiliFunzioni associateBlocchi impl multipliConcatenamento di metodiRiepilogo - Azioni sul rettangolo4Progetto: animale domestico virtuale
Definire l'animaleNutrire l'animale7Trait standard
Il trait DebugIl trait DisplayClone e CopyTrait di uguaglianzaRiepilogo - Punto stampabile10Progetto: sistema di documenti
Il trait DrawComponente di testo2Incapsulamento e moduli
Nozioni di base sui moduliLa parola chiave publicCampi privatiGetterSetterRiepilogo - Armadietto sicuro5Generics
Struct genericheMetodi genericiPiù tipi genericiFunzioni genericheRipasso - Punto di coordinate8I Trait come vincoli
Sintassi dei vincoli sui traitVincoli multipliLa clausola whereRestituire tipi con i traitRiepilogo - Stampante generica11Modelli di progettazione in Rust
Pattern NewtypeComposizioneIl trait DropFrom e IntoRipasso - Mock con smart pointer3Enumerazioni avanzate
Enumerazioni con datiMetodi sulle enumerazioniCorrispondenza delle varianti con datiL'enumerazione Option ripresaRiepilogo - enumerazione Shape6Definizione dei trait
Che cos’è un trait?Implementare i traitImplementazioni predefiniteSovrascrivere le implementazioni predefiniteTrait con parametriRiepilogo - Lettore multimedialeEsercitati da solo: Compilatore Rust online