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 fooque estivesse dentro de um mod bar {}, a usercaixa 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 cate 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!()?