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 fooc'était à l'intérieur d'un mod bar {}, la usercaisse 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 catet 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!()?