Interfaces variadiques en programmation 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, nous explorons les interfaces variadiques, qui sont des interfaces qui peuvent prendre un nombre arbitraire d'arguments. Par exemple, nous modifions la macro calculate! de la section précédente pour qu'elle soit variadique, permettant d'évaluer plusieurs expressions d'un coup.

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/BasicConceptsGroup(["Basic Concepts"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") subgraph Lab Skills rust/variable_declarations -.-> lab-99230{{"Interfaces variadiques en programmation Rust"}} rust/function_syntax -.-> lab-99230{{"Interfaces variadiques en programmation Rust"}} rust/expressions_statements -.-> lab-99230{{"Interfaces variadiques en programmation Rust"}} end

Interfaces variadiques

Une interface variadique prend un nombre arbitraire d'arguments. Par exemple, println! peut prendre un nombre arbitraire d'arguments, tel que déterminé par la chaîne de formatage.

Nous pouvons étendre la macro calculate! de la section précédente pour qu'elle soit variadique :

macro_rules! calculate {
    // Le motif pour un seul `eval`
    (eval $e:expr) => {
        {
            let val: usize = $e; // Forcer les types à être des entiers
            println!("{} = {}", stringify!{$e}, val);
        }
    };

    // Découper plusieurs `eval`s de manière récursive
    (eval $e:expr, $(eval $es:expr),+) => {{
        calculate! { eval $e }
        calculate! { $(eval $es),+ }
    }};
}

fn main() {
    calculate! { // Regardez-moi! `calculate!` variadique!
        eval 1 + 2,
        eval 3 + 4,
        eval (2 * 3) + 1
    }
}

Sortie :

1 + 2 = 3
3 + 4 = 7
(2 * 3) + 1 = 7

Sommaire

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