Expresiones match

La [palabra clave match]match keyword se usa para comparar un valor con uno o varios patrones. En ese sentido, funciona como una serie de expresiones if let:

fn main() {
    match std::env::args().next().as_deref() {
        Some("cat") => println!("Will do cat things"),
        Some("ls")  => println!("Will ls some files"),
        Some("mv")  => println!("Let's move some files"),
        Some("rm")  => println!("Uh, dangerous!"),
        None        => println!("Hmm, no program name?"),
        _           => println!("Unknown program name!"),
    }
}

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 ().

Consulta de nuevo la sección de coincidencia de patrones para obtener más información sobre los patrones de Rust.

  • Guarda la expresión de coincidencia en una variable e imprímela.
  • Elimina .as_deref() y explica el error.
    • std::env::args().next() devuelve Option<String>, pero no podemos encontrar coincidencias con String.
    • as_deref() transforma Option<T> en Option<&T::Target>. En nuestro caso, esto convierte Option<String> en Option<&str>.
    • Ahora podemos usar la coincidencia de patrones para encontrar coincidencias con &str dentro de Option.