Variadische Schnittstellen in der Rust-Programmierung

Beginner

This tutorial is from open-source community. Access the source code

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.rs verwenden und es mit rustc main.rs &&./main kompilieren 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.