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..=5
representa 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
if
separada dentro do bloco de correspondência. Uma expressãoif
dentro do bloco de ramificação (depois de=>
) acontece depois que a correspondência é selecionada. A falha na condiçãoif
dentro desse bloco não resultará em outras verificações de correspondência da expressãomatch
original serem consideradas. -
A condição definida na guarda se aplica a todas as expressões em um padrão com um
|
.