Enums
La palabra clave enum
permite crear un tipo que tiene diferentes variantes:
fn generate_random_number() -> i32 { // Implementation based on https://xkcd.com/221/ 4 // Chosen by fair dice roll. Guaranteed to be random. } #[derive(Debug)] enum CoinFlip { Heads, Tails, } fn flip_coin() -> CoinFlip { let random_number = generate_random_number(); if random_number % 2 == 0 { return CoinFlip::Heads; } else { return CoinFlip::Tails; } } fn main() { println!("You got: {:?}", flip_coin()); }
Puntos Clave:
- Las enumeraciones te permiten recoger un conjunto de valores en un solo tipo.
- En esta página se ofrece el tipo de enumeración
CoinFlip
(tirar moneda) con dos variantes:Heads
(cara) yTails
(cruz). Puede que veas el espacio de nombres cuando utilices variantes. - Este es un buen momento para comparar las estructuras y las enumeraciones:
- En ambas puedes tener una versión sencilla sin campos (estructura unitaria) o una versión con distintos tipos de campos (variantes con carga útil).
- En ambos casos, las funciones asociadas se definen en un bloque
impl
. - Incluso podrías implementar las distintas variantes de una enumeración con estructuras diferentes, pero entonces no serían del mismo tipo como lo serían si estuvieran todas definidas en una enumeración.