Correspondencia de Valores
La palabra clave match te permite comparar un valor con uno o varios patrones. Las comparaciones se hacen de arriba a abajo y el primer patrón que coincida gana.
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!("Salir"), 'a' | 's' | 'w' | 'd' => println!("Desplazarse"), '0'..='9' => println!("Introducción de números"), key if key.is_lowercase() => println!("Minúscula: {key}"), _ => println!("Otro"), } }
_ es un patrón comodín que coincide con cualquier valor. Las expresiones deben ser exhuastivas, lo que significa que deben tener en cuenta todas las posibilidades, por lo que _ a menudo se usa como un caso final que atrapa todo.
Match puede ser usado como una expresión. Al igual que con if let, cada brazo de coincidencia debe ser del mismo tipo. El tipo es la última expresión del bloque, si la hay. En el ejemplo anterior, el tipo es ().
Una variable del patrón (en este ejemplo, key) creará un enlace que se puede usar dentro del brazo de coincidencia.
Un protección de coincidencia hace que la expresión coincida únicamente si se cumple la condición.
Puntos Clave:
-
Puedes señalar cómo se usan algunos caracteres concretos en un patrón
|comoor..puede ampliarse tanto como sea necesario1..=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
|.