Filtrage par motif
1. Premier exemple, pour rappel
On commence par créer un projet pour les motifs :
cargo new motifs --bin
> Created binary (application) `motifs` package
Reprenons un petit exemple pour illustrer le filtrage par motif en général, spécialement dans le cas d’une énumération.
Imaginons une structure qui contient plusieurs sortes de personnages d’un monde merveilleux : Héros, Magicien, Fantôme et Combattant.
-
Héros est défini en tant que structure Unité.
-
Fantôme et Combattant le sont en tant que structure à champs nommés, mais avec un nombre de champs différent entre les deux.
-
Magicien est défini en tant que structure Tuple.
On a de ce fait ce code :
enum Personnage{
Heros,
Fantome { points_de_vie : u32, indice_invisibilite : u32},
Combattant { points_de_vie : u32},
Magicien(u32, u32),
}
On crée plusieurs de ces personnages :
let h = Personnage::Heros;
let f = Personnage::Fantome{points_de_vie : 25,
indice_invisibite : 12};
let c = Personnage::Combattant{points_de_vie : 35};
let m = Personnage::Magicien(34, 78);
Maintenant, on voudrait bien une unique fonction à même de nous retourner les données précises qui composent chaque personnage. On ne peut pas demander directement à l’énumération...