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 Result { Ok(i32), Err(String), } fn divide_in_two(n: i32) -> Result { if n % 2 == 0 { Result::Ok(n / 2) } else { Result::Err(format!("não é possível dividir {n} em duas partes iguais")) } } fn main() { let n = 100; match divide_in_two(n) { Result::Ok(half) => println!("{n} divido em dois é {half}"), Result::Err(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, half
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.