capypad
0 Tage Serie
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
rust
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 even
println!("{}", classify_number(50)); // small positive
println!("{}", 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