Correspondencia de Patrones
The match keyword lets you match a value against one or more patterns. The comparisons are done from top to bottom and the first match wins.
Los patrones pueden ser valores simples, del mismo modo que switch en C y C++:
#[rustfmt::skip] fn main() { let input = 'x'; match input { 'q' => println!("Quitting"), 'a' | 's' | 'w' | 'd' => println!("Moving around"), '0'..='9' => println!("Number input"), key if key.is_lowercase() => println!("Lowercase: {key}"), _ => println!("Something else"), } }
The _ pattern is a wildcard pattern which matches any value. The expressions must be irrefutable, meaning that it covers every possibility, so _ is often used as the final catch-all case.
Match can be used as an expression. Just like if, each match arm must have the same type. The type is the last expression of the block, if any. In the example above, the type is ().
A variable in the pattern (key in this example) will create a binding that can be used within the match arm.
A match guard causes the arm to match only if the condition is true.
Puntos Clave:
-
Puedes señalar cómo se usan algunos caracteres concretos en un patrón
|comoor,..se puede ampliar tanto como sea necesario.1..=5representa un rango inclusivo._es un comodín.
-
Las guardas de coincidencia, como característica sintáctica independiente, son importantes y necesarios cuando queremos expresar de forma concisa ideas más complejas de lo que permitirían los patrones por sí solos.
-
No son lo mismo que una expresión
ifindependiente dentro del brazo de coincidencias. Una expresiónifdentro del bloque de ramas (después de=>) se produce tras seleccionar el brazo de coincidencias. Si no se cumple la condiciónifdentro de ese bloque, no se tienen en cuenta otros brazos de la expresiónmatchoriginal. -
La condición definida en el guarda se aplica a todas las expresiones de un patrón con un
|.