Guardias - Rust By Example
Description: Rust by Example (RBE) is a collection of runnable examples that illustrate various Rust concepts and standard libraries.

## Keyboard shortcuts

Press `←` or `→` to navigate between chapters

Press `S` or `/` to search in the book

Press `?` to show this help

Press `Esc` to hide this help

# Guardias

A `match` guard can be added to filter the arm.

    #[allow(dead_code)]
    enum Temperature {
        Celsius(i32),
        Fahrenheit(i32),
    }

    fn main() {
        let temperature = Temperature::Celsius(35);
        // ^ TODO try different values for `temperature`

        match temperature {
            Temperature::Celsius(t) if t > 30 => println!("{}C is above 30 Celsius", t),
            // The `if condition` part ^ is a guard
            Temperature::Celsius(t) => println!("{}C is equal to or below 30 Celsius", t),

            Temperature::Fahrenheit(t) if t > 86 => println!("{}F is above 86 Fahrenheit", t),
            Temperature::Fahrenheit(t) => println!("{}F is equal to or below 86 Fahrenheit", t),
        }
    }

Note that the compiler won’t take guard conditions into account when checking if all patterns are covered by the match expression.

    fn main() {
        let number: u8 = 4;

        match number {
            i if i == 0 => println!("Zero"),
            i if i > 0 => println!("Greater than zero"),
            // _ => unreachable!("Should never happen."),
            // TODO ^ uncomment to fix compilation
        }
    }

### Ver también

Tuples Enums