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ón if dentro del bloque de ramas (después de =>) se produce tras seleccionar el brazo de coincidencias. Si no se cumple la condición if dentro de ese bloque, no se tienen en cuenta otros brazos de la expresión match 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 |.