Guardas de Match
Al establecer coincidencias, puedes añadir un guardia a un patrón. Se trata de una expresión booleana arbitraria que se ejecutará si el patrón coincide:
#[rustfmt::skip] fn main() { let pair = (2, -2); println!("Tell me about {pair:?}"); match pair { (x, y) if x == y => println!("These are twins"), (x, y) if x + y == 0 => println!("Antimatter, kaboom!"), (x, _) if x % 2 == 1 => println!("The first one is odd"), _ => println!("No correlation..."), } }
Puntos Clave:
- 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
if
independiente dentro del brazo de coincidencias. Una expresiónif
dentro del bloque de ramas (después de=>
) se produce tras seleccionar el brazo de coincidencias. Si no se cumple la condiciónif
dentro de ese bloque, no se tienen en cuenta otros brazos de la expresiónmatch
original. - Puedes usar las variables definidas en el patrón en tu expresión if.
- La condición definida en el guarda se aplica a todas las expresiones de un patrón con un
|
.