rust / intermediate
Snippet
Pattern Matching mit Guard-Ausdrücken
Guard-Ausdrücke in Match-Armen ermöglichen es, zusätzliche Bedingungen über das Pattern Matching hinaus hinzuzufügen. Die `if`-Bedingung nach dem Pattern wird nur ausgewertet, wenn das Pattern übereinstimmt, was komplexe Filterlogik in Match-Ausdrücken ermöglicht. Guards kombinieren Pattern-Destrukturierung mit booleschen Bedingungen.
snippet.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
fn classify_number(n: i32) -> &'static str {match n {n if n < 0 && n % 2 == 0 => "negative even",n if n < 0 => "negative odd",n if n == 0 => "zero",n if n > 0 && n < 100 => "small positive",n if n >= 100 && n % 2 == 0 => "large even",_ => "large odd",}}fn main() {println!("{}", classify_number(-4)); // negative evenprintln!("{}", classify_number(50)); // small positiveprintln!("{}", classify_number(200)); // large even}
Erklärung
1
n if n < 0 && n % 2 == 0 =>
Guard prüft sowohl Negativität als auch Gradheit, nachdem das Pattern n bindet
2
n if n < 0 =>
Guard für jede negative Zahl, die nicht vom vorherigen Arm erfasst wurde
3
n if n >= 100 && n % 2 == 0 =>
Guard kombiniert mehrere Bedingungen für große gerade Zahlen
4
_ => "large odd"
Wildcard fängt verbleibende Fälle, die nicht von Guards gematcht wurden