« Rust: enums » : différence entre les versions
Aller à la navigation
Aller à la recherche
(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... ») |
Aucun résumé des modifications |
||
(Une version intermédiaire par la même utilisatrice non affichée) | |||
Ligne 1 : | Ligne 1 : | ||
<syntaxhighlight lang='rust'> | |||
// Un enum prend plusieurs types prédéfinis | // Un enum prend plusieurs types prédéfinis | ||
// chaque instance de cet enum devra choisir dans une de ces valeurs | // chaque instance de cet enum devra choisir dans une de ces valeurs | ||
Ligne 51 : | Ligne 51 : | ||
//D'ailleurs, la lib standard implémente une définition pour les adresses IP | //D'ailleurs, la lib standard implémente une définition pour les adresses IP | ||
//sur ce modèle | //sur ce modèle | ||
</ | </syntaxhighlight> |
Dernière version du 3 novembre 2022 à 09:18
<syntaxhighlight lang='rust'> // 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 </syntaxhighlight>