capypad
0 Tage Serie
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
rust
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 aged
println!("{}", classify_age(14)); // teen odd
println!("{}", 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