Translate

martes, 15 de agosto de 2023

Enums en Rust


La palabra clave enum permite la creación de un tipo que tiene algunas variantes diferentes:

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());

}


  • Las enumeraciones le permiten recopilar un conjunto de valores bajo un tipo
  • Este ejemplo ofrece un tipo de enumeración CoinFlip con dos variantes Cara y Cruz. (CoinFlip::Heads y CoinFlip::Tails)
  • Este podría ser un buen momento para comparar Structs y Enums:
    • En ambos, puede tener una versión simple sin campos (estructura de unidad) o una con diferentes tipos de campos (cargas de variantes).
    • En ambos, las funciones asociadas se definen dentro de un bloque impl.
    • Incluso podría implementar las diferentes variantes de una enumeración con estructuras separadas, pero entonces no serían del mismo tipo que si estuvieran todas definidas en una enumeración.