Structs, Enums und Traits
Rust Traits
Describe shared behavior once and implement it for any type, like interfaces in other languages.
Das lernst du
- 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.
Das Wichtigste
- A trait lists methods a type must have.
- A default method can be kept or replaced.
- Box<dyn Trait> stores different types together.
Ausführbares Rust-Beispiel
Rust
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 itemsÜben
Öffne das Beispiel im Online-Compiler, ändere einen Wert oder füge eine Zeile hinzu und sage die Ausgabe voraus, bevor du es ausführst. Bring den Code danach absichtlich zum Scheitern und lies die Meldung des Compilers.
Lektion fertig?
Markiere sie als gelernt, um deinen Fortschritt zu verfolgen.
Dein Fortschritt ist in diesem Browser gespeichert Melde dich an, um ihn auf jedem Gerät zu behalten.
Mit einer Challenge üben
Nutze den Inhalt dieser Lektion, um ein echtes Problem zu lösen. Jede Challenge läuft im Browser, mit sofortigen Tests und einem KI-Review.
Alle Challenges