capypad
0 Tage Serie
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
rust
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