Macros dentro da mesma caixa
#[macro_use]
mod foo {
macro_rules! bar {
() => ()
}
}
bar!();
Se você quiser usar a macro na mesma caixa, o módulo em que sua macro está definida precisa do atributo #[macro_use]
.
As macros só podem ser usadas depois de definidas. Isso significa que isso não funciona:
bar!();
#[macro_use]
mod foo {
macro_rules! bar {
() => ()
}
}
Macros em caixas
Para usar sua macro_rules!
macro de outras caixas, a própria macro precisa do atributo #[macro_export]
. A caixa de importação pode então importar a macro via use crate_name::macro_name;
.
Caixote util
#[macro_export]
macro_rules! foo {
() => ()
}
Caixote user
use util::foo;
foo!();
Observe que as macros sempre vivem no nível superior de uma caixa; então, mesmo foo
que estivesse dentro de um mod bar {}
, a user
caixa ainda teria que escrever use util::foo;
e não use util::bar::foo;
.
Antes do Rust 2018, você tinha que importar macro de outras caixas adicionando o atributo #[macro_use]
à extern crate util;
instrução. Isso importaria todas as macros de util
. Como alternativa, #[macro_use(cat, dog)]
pode ser usado apenas para importar as macros cat
e dog
. Esta sintaxe não deve ser mais necessária.
Mais informações estão disponíveis no capítulo The Rust Programming Language sobre macros .
module::my_macro!()?