rust / intermediate
Snippet
Enum mit Daten-Varianten
Rust-Enums können verschiedene Datentypen in jeder Variante halten. Quit hat keine Daten, Move enthält benannte Felder, Write hält einen String, und ChangeColor hält drei u8-Werte. Pattern Matching extrahiert Werte aus den Varianten.
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
25
26
27
enum Message {Quit,Move { x: i32, y: i32 },Write(String),ChangeColor(u8, u8, u8),}fn process(msg: Message) {match msg {Message::Quit => println!("Quit requested"),Message::Move { x, y } => println!("Move to ({}, {})", x, y),Message::Write(text) => println!("Write: {}", text),Message::ChangeColor(r, g, b) => println!("Color: RGB({}, {}, {})", r, g, b),}}fn main() {let msgs = vec![Message::Quit,Message::Move { x: 10, y: 20 },Message::Write(String::from("Hello")),Message::ChangeColor(255, 128, 0),];for msg in msgs {process(msg);}}
Erklärung
1
enum Message {
Definiert ein Enum mit vier verschiedenen Varianten
2
Message::Move { x: i32, y: i32 }
Variante mit benannten Feldern wie eine Struktur
3
Message::Write(String)
Variante, die einen einzelnen String-Wert hält
4
match msg {
Erschöpfendes Pattern Matching auf Enum-Varianten
5
Message::Move { x, y } =>
Dekonstruiert die benannten Felder aus der Move-Variante