Expressões match (Correspondência)

A palavra-chave match é usada para corresponder um valor a um ou mais padrões. Nesse sentido, funciona como uma série de expressões if let:

fn main() {
    match std::env::args().next().as_deref() {
        Some("gato") => println!("Vai fazer coisas de gato"),
        Some("ls")  => println!("Vou ls alguns arquivos"),
        Some("mv")  => println!("Vamos mover alguns arquivos"),
        Some("rm")  => println!("Uh, perigoso!"),
        None        => println!("Hmm, nenhum nome de programa?"),
        _           => println!("Nome de programa desconhecido!"),
    }
}

Assim como if let, cada braço de correspondência deve ter o mesmo tipo. O tipo é a última expressão do bloco, se houver. No exemplo acima, o tipo é ().

Consulte correspondência de padrões (pattern matching) para obter mais detalhes sobre padrões em Rust.

  • Salve o resultado de uma expressão de correspondência match em uma variável e imprima-a.
  • Remova .as_deref() e explique o erro gerado.
    • std::env::Args().next() retorna um Option<&String>, porém match não funciona com o tipo String.
    • as_deref() transforma um Option<T> em Option<&T::Target>. Em nosso caso, isso transforma um Option<String> em Option<&str>.
    • Agora podemos usar a correspondência de padrões em um &str dentro de Option.