Rust: enums

De Justine's wiki
Version datée du 3 novembre 2022 à 09:13 par Justine (discussion | contributions) (Page créée avec «  <nowiki> // Un enum prend plusieurs types prédéfinis // chaque instance de cet enum devra choisir dans une de ces valeurs enum IpAddrKind { V4, V6 } //On peut aussi attacher des données enum IpAddr { V4(String), V6(String) } //Voire les utiliser dans des structs struct Address { kind: IpAddrKind, address: String } //Un enum peut contenir tout type de data //et avoir des variantes sur le même modèle qu'un struct, //l'avantage étan... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche
// Un enum prend plusieurs types prédéfinis
// chaque instance de cet enum devra choisir dans une de ces valeurs
enum IpAddrKind {
    V4,
    V6
}

//On peut aussi attacher des données
enum IpAddr {
    V4(String),
    V6(String)
}

//Voire les utiliser dans des structs
struct Address {
    kind: IpAddrKind,
    address: String
}

//Un enum peut contenir tout type de data
//et avoir des variantes sur le même modèle qu'un struct,
//l'avantage étant que c'est dans un seul objet
enum TresVarie {
    RienDuTout,
    DesChampsNommes {x: i32, y: i32},
    UnString(String),
    UnTuple(i32, i32)
}

//Et un enum peut aussi avoir des méthodes
impl Address {
    fn print_add(&self) {
        println!("{}", self.address);
    }
}

fn main() {

    //L'instanciation se fait sur le principe de namespace...
    let home_add = IpAddr::V4(String::from("1.2.3.4"));
    let whatever = IpAddr::V6;
    let dns_add = Address {
        kind: IpAddrKind::V4,
        address: String::from("1.1.1.1")
    };
    dns_add.print_add()

}

//D'ailleurs, la lib standard implémente une définition pour les adresses IP
//sur ce modèle