rust / beginner
Snippet
Trait-Grundlagen und Implementierung
Traits definieren gemeinsames Verhalten, das mehrere Typen implementieren können. Sie ähneln Interfaces in anderen Sprachen. Das Schlüsselwort dyn erstellt ein Trait-Objekt für dynamische Dispatch. Traits ermöglichen Polymorphie und Code-Wiederverwendung über verschiedene Typen hinweg.
snippet.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
trait Summable {fn sum(&self) -> i32;}struct Point {x: i32,y: i32,}impl Summable for Point {fn sum(&self) -> i32 {self.x + self.y}}fn total(items: &[&dyn Summable]) -> i32 {items.iter().map(|p| p.sum()).sum()}fn main() {let p1 = Point { x: 3, y: 4 };let p2 = Point { x: 5, y: 6 };println!("Total: {}", total(&[&p1, &p2]));}
Erklärung
1
trait Summable { ... }
Definiert ein Trait mit einer erforderlichen Methodensignatur
2
impl Summable for Point { ... }
Implementiert das Trait für die Point-Struktur
3
&[&dyn Summable]
Referenz auf Slice von Trait-Objekten für dynamische Dispatch