Retour à la leçonMission
Mission : une macro variadique qui boucle a l'infini
Diagnostiquer une macro_rules! recursive mal formee et une struct dupliquee, puis corriger la macro et en generer une version generique.
Contexte
Un dev veut ecrire une macro min_de! (inverse de max_de! vu en cours) pour trouver le plus petit d'un nombre variable d'arguments, mais son projet ne compile plus, avec une erreur de compilation qui mentionne 'recursion limit reached while expanding the macro' :
rust
macro_rules! min_de {
($x:expr, $($reste:expr),+) => {
{
let a = $x;
let b = min_de!($($reste),+);
if a < b { a } else { b }
}
};
}Separement, le projet contient trois struct quasi identiques Point2Di32, Point2Df64 et Point2Du32, copiees-collees a la main avec seulement le type qui change, ce que l'equipe veut remplacer par une seule macro generatrice.