Correspondendo Valores
A palavra-chave match permite que você corresponda um valor a um ou mais padrões (patterns). As comparações são feitas de cima para baixo e a primeira correspondência encontrada é selecionada.
Os padrões podem ser valores simples, similarmente a switch em C e C++:
#[rustfmt::skip] fn main() { let input = 'x'; match input { 'q' => println!("Encerrando"), 'a' | 's' | 'w' | 'd' => println!("Movendo por aí"), '0'..='9' => println!("Entrada de número"), key if key.is_lowercase() => println!("Minúsculas: {key}"), _ => println!("Alguma outra coisa"), } }
O padrão _ é um padrão curinga que corresponde a qualquer valor. As expressões devem ser irrefutáveis, o que significa que cobre todas as possibilidades, então _ é frequentemente usado como o último caso de captura.
Correspondência pode ser usada como uma expressão. Assim como if, 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 é ().
Uma variável no padrão (key neste exemplo) criará uma ligação que pode ser usada dentro do braço de correspondência.
Uma guarda de correspondência faz com que o braço corresponda somente se a condição for verdadeira.
Pontos Chave:
-
Você pode apontar como alguns caracteres específicos podem ser usados em um padrão
|como umor..pode expandir o quanto for necessário1..=5representa um intervalo inclusivo_é um curinga
-
Guardas de correspondência, como um recurso de sintaxe separado, são importantes e necessárias quando se quer expressar ideias mais complexas do que somente o padrão permitiria.
-
Eles não são iguais à expressão
ifseparada dentro do bloco de correspondência. Uma expressãoifdentro do bloco de ramificação (depois de=>) acontece depois que a correspondência é selecionada. A falha na condiçãoifdentro desse bloco não resultará em outras verificações de correspondência da expressãomatchoriginal serem consideradas. -
A condição definida na guarda se aplica a todas as expressões em um padrão com um
|.