Componente di testo
Fa parte della sezione Programmazione orientata agli oggetti del percorso Rust di Coddy. Lezione 50 di 61.
Sfida
FacilePartendo dal trait Draw che hai creato nella lezione precedente, aggiungiamo il nostro primo vero componente UI: un TextField. Questo componente rappresenterà un elemento di visualizzazione del testo nel nostro sistema di documenti.
Espanderai il tuo progetto con un nuovo file di modulo:
draw.rs: Mantieni il traitDrawdella sfida precedente.text_field.rs: Crea una structTextFieldcon un campo pubblicocontent(unaString). Implementa il traitDrawperTextField, in modo che chiamandodraw()venga stampato il testo in un formato specifico:Text: {content}main.rs: Includi entrambi i moduli e crea un'istanza diTextField. Chiama il suo metododraw()per visualizzare il componente.
Ricorda che il tuo modulo text_field deve usare il trait Draw del modulo draw. Puoi accedervi con crate::draw::Draw, poiché entrambi i moduli fanno parte dello stesso crate.
Verrà fornito il seguente input:
- Una stringa che rappresenta il contenuto del campo di testo
Il tuo output dovrà seguire questo formato esatto:
Text: Hello WorldProvalo tu
mod draw;
mod text_field;
use draw::Draw;
pub struct Label {
pub text: String,
}
impl Draw for Label {
fn draw(&self) {
println!("{}", self.text);
}
}
fn main() {
let mut input = String::new();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let content = input.trim().to_string();
// TODO: Crea un'istanza di TextField e chiama draw() su di essa
}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