Répétition de macros en Rust

RustRustBeginner
Pratiquer maintenant

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

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, vous allez apprendre à utiliser des macros avec les symboles + et * dans la liste d'arguments pour indiquer une répétition. Plus précisément, l'exemple fourni montre comment utiliser $(...),+ pour correspondre à une ou plusieurs expressions séparées par des virgules. La macro, find_min!, calcule la valeur minimale parmi un nombre variable d'arguments.

Note : Si le laboratoire ne spécifie pas de nom de fichier, vous pouvez utiliser n'importe quel nom de fichier que vous voulez. Par exemple, vous pouvez utiliser main.rs, le compiler et l'exécuter avec rustc main.rs &&./main.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/DataStructuresandEnumsGroup(["Data Structures and Enums"]) 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{{"Répétition de macros en Rust"}} rust/expressions_statements -.-> lab-99227{{"Répétition de macros en Rust"}} rust/method_syntax -.-> lab-99227{{"Répétition de macros en Rust"}} end

Répéter

Les macros peuvent utiliser + dans la liste d'arguments pour indiquer qu'un argument peut se répéter au moins une fois, ou *, pour indiquer que l'argument peut se répéter zéro ou plusieurs fois.

Dans l'exemple suivant, entourer le correspondant avec $(...),+ correspondra à une ou plusieurs expressions, séparées par des virgules. Notez également que le point-virgule est facultatif dans le dernier cas.

// `find_min!` calculera le minimum de n'importe quel nombre d'arguments.
macro_rules! find_min {
    // Cas de base :
    ($x:expr) => ($x);
    // `$x` suivi d'au moins un `$y,`
    ($x:expr, $($y:expr),+) => (
        // Appelez `find_min!` sur la queue `$y`
        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));
}

Sommaire

Félicitations ! Vous avez terminé le laboratoire Répéter. Vous pouvez pratiquer d'autres laboratoires sur LabEx pour améliorer vos compétences.