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 umOption<&String>
, porémmatch
não funciona com o tipoString
.as_deref()
transforma umOption<T>
emOption<&T::Target>
. Em nosso caso, isso transforma umOption<String>
emOption<&str>
.- Agora podemos usar a correspondência de padrões em um
&str
dentro deOption
.