Makro-Wiederholung in Rust

RustRustBeginner
Jetzt üben

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

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernst du, wie Makros mit den Symbolen + und * in der Argumentliste verwendet werden, um Wiederholungen anzugeben. Insbesondere zeigt das bereitgestellte Beispiel, wie $(...),+ verwendet wird, um eine oder mehrere durch Kommata getrennte Ausdrücke zu treffen. Das Makro find_min! berechnet den kleinsten Wert unter einer variablen Anzahl von Argumenten.

Hinweis: Wenn das Lab keinen Dateinamen angibt, kannst du einen beliebigen Dateinamen verwenden. Beispielsweise kannst du main.rs verwenden und es mit rustc main.rs &&./main kompilieren und ausführen.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/DataStructuresandEnumsGroup(["Data Structures and Enums"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/DataStructuresandEnumsGroup -.-> rust/method_syntax("Method Syntax") subgraph Lab Skills rust/function_syntax -.-> lab-99227{{"Makro-Wiederholung in Rust"}} rust/expressions_statements -.-> lab-99227{{"Makro-Wiederholung in Rust"}} rust/method_syntax -.-> lab-99227{{"Makro-Wiederholung in Rust"}} end

Wiederholung

Makros können in der Argumentliste + verwenden, um anzuzeigen, dass ein Argument mindestens einmal wiederholt werden kann, oder *, um anzuzeigen, dass das Argument null oder mehrmals wiederholt werden kann.

Im folgenden Beispiel wird das Matcher mit $(...),+ umgeben, um eine oder mehrere Ausdrücke zu treffen, die durch Kommas getrennt sind. Beachten Sie auch, dass das Semikolon im letzten Fall optional ist.

// `find_min!` wird den kleinsten Wert von beliebig vielen Argumenten berechnen.
macro_rules! find_min {
    // Basisfall:
    ($x:expr) => ($x);
    // `$x` gefolgt von mindestens einem `$y,`
    ($x:expr, $($y:expr),+) => (
        // Rufen Sie `find_min!` auf dem Rest `$y` auf
        std::cmp::min($x, find_min!($($y),+))
    )
}

fn main() {
    println!("{}", find_min!(1));
    println!("{}", find_min!(1 + 2, 2));
    println!("{}", find_min!(5, 2 * 3, 4));
}

Zusammenfassung

Herzlichen Glückwunsch! Du hast das Wiederholungslab abgeschlossen. Du kannst in LabEx weitere Labs ausprobieren, um deine Fähigkeiten zu verbessern.