capypad
0 Tage Serie
rust / intermediate
Snippet

Musterabgleich mit Enums

Musterabgleich mit match-Ausdrücken ist Rosts leistungsstarke Methode zur Behandlung von Enums. Der Compiler stellt sicher, dass alle Fälle abgedeckt sind, was den Code erschöpfend und sicher macht. Im Gegensatz zu switch-Anweisungen in anderen Sprachen muss Rusts match erschöpfend sein — das Auslassen eines Falls führt zu einem Kompilierfehler. Dies eliminiert ganze Kategorien von Bugs zur Kompilierzeit.

snippet.rs
rust
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#[derive(Debug)]
enum Direction {
North,
South,
East,
West,
}
 
fn move(direction: Direction) -> &'static str {
match direction {
Direction::North => "Moving north",
Direction::South => "Moving south",
Direction::East => "Moving east",
Direction::West => "Moving west",
}
}
 
fn main() {
let heading = Direction::North;
println!("{:?} -> {}", heading, move(heading));
}
Erklärung
1
#[derive(Debug)]
Makro, das automatisch die Debug-Trait-Implementierung für Debug-Ausgaben generiert
2
enum Direction { ... }
Enum das vier Richtungs-Varianten definiert, alle unit-ähnliche Structs
3
fn move(direction: Direction) -> &'static str
Funktion die Direction-Enum nimmt und einen String-Slice zurückgibt
4
match direction { ... }
Erschöpfender Musterabgleich — Compiler erzwingt alle Varianten behandelt
5
Direction::North => "Moving north"
Musterarm der Variante zu Rückgabewert mapt