rust / intermediate
Snippet
Match Guards und @-Binding in Rust
Match Guards fügen Mustern bedingte Logik hinzu, indem sie 'if'-Ausdrücke verwenden, während der @-Operator übereinstimmende Werte an Variablen innerhalb des Musters bindet. Diese Kombination ermöglicht es, Daten sowohl zu filtern als auch zu erfassen - in einem einzigen Match-Arm.
snippet.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
fn classify_age(age: u32) -> &'static str {match age {0..=12 => "child",13..=19 if age % 2 == 0 => "teen even",13..=19 => "teen odd",n @ 20..=65 => if n >= 50 { "middle aged" } else { "young adult" },_ => "senior"}}fn main() {println!("{}", classify_age(25)); // middle agedprintln!("{}", classify_age(14)); // teen oddprintln!("{}", classify_age(16)); // teen even}
Erklärung
1
13..=19 if age % 2 == 0
Match Guard filtert den Bereich 13-19 auf nur gerade Alter
2
n @ 20..=65
@-Binding erfasst den übereinstimmenden Alterswert in Variable n zur Verwendung im Arm-Körper
3
if n >= 50 { ... }
Guard erzeugt eine zweite Bedingung auf dem bereits abgeglichenen Bereich