rust / intermediate
Snippet
Muster-Destrukturierung in Match-Armen
Match-Arme können komplexe Enum-Varianten direkt destrukturieren und ihre inneren Felder an Variablen binden. Dies eliminiert die Notwendigkeit für manuellen Feldzugriff nach dem Matchen. Die Destrukturierung funktioniert rekursiv und erlaubt tiefe Extraktion von verschachtelten Datenstrukturen innerhalb eines einzelnen Musters.
snippet.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#[derive(Debug)]enum Device {Mobile { brand: String, model: String },Desktop { cores: u8, ram_gb: u32 },}fn main() {let device = Device::Mobile { brand: String::from("Apple"), model: String::from("iPhone") };match device {Device::Mobile { brand, model } => println!("Mobile: {} {}", brand, model),Device::Desktop { cores, ram_gb } => println!("Desktop: {} cores, {} GB RAM", cores, ram_gb),}}
Erklärung
1
#[derive(Debug)]
Leitet das Debug Trait ab, um {:?} Formatierung für das Enum zu ermöglichen
2
enum Device { Mobile {...}, Desktop {...} }
Enum mit zwei Varianten, die verschiedene Nutzdatentypen enthalten
3
Device::Mobile { brand, model } =>
Destrukturiert die struct-ähnliche Variante und extrahiert brand und model als lokale Variablen
4
println!("Mobile: {} {}", brand, model)
Verwendet die destrukturierten Variablen direkt ohne jegliche Feldzugriffssyntax