Macros dentro de la misma caja
#[macro_use]
mod foo {
macro_rules! bar {
() => ()
}
}
bar!();
Si desea utilizar la macro en la misma caja, el módulo en el que está definida su macro necesita el atributo #[macro_use]
.
Las macros solo se pueden utilizar después de que se hayan definido. Esto significa que esto no funciona:
bar!();
#[macro_use]
mod foo {
macro_rules! bar {
() => ()
}
}
Macros en cajas
Para usar su macro_rules!
macro de otras cajas, la macro en sí necesita el atributo #[macro_export]
. La caja de importación puede importar la macro a través de use crate_name::macro_name;
.
Caja util
#[macro_export]
macro_rules! foo {
() => ()
}
Caja user
use util::foo;
foo!();
Tenga en cuenta que las macros siempre viven en el nivel superior de una caja; así que incluso si foo
estuviera dentro de un mod bar {}
, la user
caja todavía tendría que escribir use util::foo;
y no use util::bar::foo;
.
Antes de Rust 2018, tenía que importar macro de otras cajas agregando el atributo #[macro_use]
a la extern crate util;
declaración. Eso importaría todas las macros de util
. Alternativamente, #[macro_use(cat, dog)]
podría usarse para importar solo las macros cat
y dog
. Esta sintaxis ya no debería ser necesaria.
Hay más información disponible en el capítulo sobre macros de The Rust Programming Language .
module::my_macro!()?