Macros dans la même caisse
#[macro_use]
mod foo {
macro_rules! bar {
() => ()
}
}
bar!();
Si vous souhaitez utiliser la macro dans la même caisse, le module dans lequel votre macro est définie a besoin de l'attribut #[macro_use]
.
Les macros ne peuvent être utilisées qu'après avoir été définies. Cela signifie que cela ne fonctionne pas:
bar!();
#[macro_use]
mod foo {
macro_rules! bar {
() => ()
}
}
Macros dans les caisses
Pour utiliser votre macro_rules!
macro à partir d'autres caisses, la macro elle-même a besoin de l'attribut #[macro_export]
. La caisse d'importation peut ensuite importer la macro via use crate_name::macro_name;
.
Caisse util
#[macro_export]
macro_rules! foo {
() => ()
}
Caisse user
use util::foo;
foo!();
Notez que les macros se trouvent toujours au niveau supérieur d'une caisse; donc même si foo
c'était à l'intérieur d'un mod bar {}
, la user
caisse devrait encore écrire use util::foo;
et non use util::bar::foo;
.
Avant Rust 2018, vous deviez importer une macro à partir d'autres caisses en ajoutant l'attribut #[macro_use]
à l' extern crate util;
instruction. Cela importerait toutes les macros à partir de util
. Alternativement, #[macro_use(cat, dog)]
pourrait être utilisé pour importer uniquement les macros cat
et dog
. Cette syntaxe ne devrait plus être nécessaire.
Plus d'informations sont disponibles dans le chapitre du langage de programmation Rust sur les macros .
module::my_macro!()?