Struct, enum e trait
Rust Traits
Describe shared behavior once and implement it for any type, like interfaces in other languages.
Cosa imparerai
- Defining a trait
- Default methods
- impl Trait and dyn Trait
trait Describe
DescribeDogkeeps the defaultRobotreplaces describe
Shared behavior for different types
A trait is a set of methods that a type can implement, similar to an interface in other languages. Code written against the trait works with every type that implements it.
Describe requires name and gives describe a default body. Dog keeps the default, while Robot replaces it. introduce accepts any type that implements Describe, and Box<dyn Describe> lets one vector hold values of different types.
Punti chiave
- A trait lists methods a type must have.
- A default method can be kept or replaced.
- Box<dyn Trait> stores different types together.
Esempio Rust eseguibile
main.rs
trait Describe {
fn name(&self) -> String;
fn describe(&self) -> String {
format!("This is {}.", self.name())
}
}
struct Dog;
struct Robot {
model: u32,
}
impl Describe for Dog {
fn name(&self) -> String {
String::from("a dog")
}
}
impl Describe for Robot {
fn name(&self) -> String {
format!("robot model {}", self.model)
}
fn describe(&self) -> String {
format!("Beep. I am {}.", self.name())
}
}
fn introduce(item: &impl Describe) {
println!("{}", item.describe());
}
fn main() {
introduce(&Dog);
introduce(&Robot { model: 7 });
let items: Vec<Box<dyn Describe>> = vec![Box::new(Dog), Box::new(Robot { model: 8 })];
println!("{} items", items.len());
}
This is a dog.
Beep. I am robot model 7.
2 itemsEsercitati
Apri l'esempio nel compilatore online, cambia un valore o aggiungi una riga e prova a prevedere l'output prima di eseguirlo. Poi rompi il codice di proposito e leggi il messaggio del compilatore.
Hai finito questa lezione?
Segnala come imparata per tenere traccia dei tuoi progressi.
I tuoi progressi sono salvati in questo browser Accedi per conservarli su ogni dispositivo.
Esercitati con una sfida
Usa ciò che questa lezione spiega per risolvere un problema reale. Ogni sfida gira nel browser, con test immediati e una revisione dell'IA.
Tutte le sfide