Einführung
In diesem Lab untersuchen wir variadische Schnittstellen, das sind Schnittstellen, die beliebig viele Argumente akzeptieren können. Als Beispiel ändern wir die calculate!-Makro aus dem vorherigen Abschnitt, um es variadisch zu machen, sodass es mehrere Ausdrücke gleichzeitig auswerten kann.
Hinweis: Wenn das Lab keinen Dateinamen angibt, können Sie einen beliebigen Dateinamen verwenden. Beispielsweise können Sie
main.rsverwenden und es mitrustc main.rs &&./mainkompilieren und ausführen.
Variadische Schnittstellen
Eine variadische Schnittstelle nimmt beliebig viele Argumente an. Beispielsweise kann println! beliebig viele Argumente entgegennehmen, wie durch die Formatzeichenfolge bestimmt.
Wir können unsere calculate!-Makro aus dem vorherigen Abschnitt erweitern, um es variadisch zu machen:
macro_rules! calculate {
// Das Muster für einen einzelnen `eval`
(eval $e:expr) => {
{
let val: usize = $e; // Zwinge die Typen zu Ganzzahlen
println!("{} = {}", stringify!{$e}, val);
}
};
// Zerlege mehrere `eval`s rekursiv
(eval $e:expr, $(eval $es:expr),+) => {{
calculate! { eval $e }
calculate! { $(eval $es),+ }
}};
}
fn main() {
calculate! { // Sieh mal, Mama! Variadisches `calculate!`!
eval 1 + 2,
eval 3 + 4,
eval (2 * 3) + 1
}
}
Ausgabe:
1 + 2 = 3
3 + 4 = 7
(2 * 3) + 1 = 7
Zusammenfassung
Herzlichen Glückwunsch! Sie haben das Lab zu Variadischen Schnittstellen abgeschlossen. Sie können in LabEx weitere Labs absolvieren, um Ihre Fähigkeiten zu verbessern.