Interfaces variadiques en programmation Rust

Beginner

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

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.

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.