Pattern matching avancé
Avancé// Déstructuration imbriquée
match message {
Message::Deplacer { x: 0, y } => println!("sur l'axe Y : {y}"),
Message::Deplacer { x, y: 0 } => println!("sur l'axe X : {x}"),
Message::Couleur(r, _, _) if r > 200 => println!("rouge vif"),
_ => {}
}
// Liaison avec @
match age {
n @ 0..=17 => println!("mineur ({n})"),
n @ 18.. => println!("majeur ({n})"),
}
// Slices
match liste {
[] => println!("vide"),
[seul] => println!("un : {seul}"),
[premier, .., dernier] => println!("{premier} .. {dernier}"),
}
// while let : consommer jusqu'à épuisement
while let Some(top) = pile.pop() { println!("{top}"); }
// matches! : test booléen d'un motif
let est_erreur = matches!(resultat, Err(_));