Desestruturando Enums
Os padrões também podem ser usados para vincular variáveis a partes de seus valores. É assim que você inspeciona a estrutura de seus tipos. Vamos começar com um tipo enum
simples:
enum Resultado { Ok(i32), Erro(String), } fn divide_em_dois(n: i32) -> Resultado { if n % 2 == 0 { Resultado::Ok(n / 2) } else { Resultado::Erro(format!("não é possível dividir {n} em duas partes iguais")) } } fn main() { let n = 100; match divide_em_dois(n) { Resultado::Ok(metade) => println!("{n} divido em dois é {metade}"), Resultado::Erro(msg) => println!("desculpe, aconteceu um erro: {msg}"), } }
Aqui usamos a verificação de correspondência para desestruturar o valor contido em Result
. Na primeira verificação de correspondência, metade
está vinculado ao valor dentro da variante Ok
. Na segunda, msg
está vinculado à mensagem de erro.
Pontos chave:
- A expressão
if
/else
está retornando umenum
que é posteriormente descompactado com ummatch
. - Você pode tentar adicionar uma terceira variante à definição de Enum e exibir os erros ao executar o código. Aponte os lugares onde seu código agora é “não exaustivo” e como o compilador tenta lhe dar dicas.