Makra w tej samej skrzynce
#[macro_use]
mod foo {
macro_rules! bar {
() => ()
}
}
bar!();
Jeśli chcesz użyć makra w tej samej skrzynce, moduł, w którym zdefiniowane jest makro, potrzebuje atrybutu #[macro_use].
Makra można używać tylko po ich zdefiniowaniu. Oznacza to, że to nie działa:
bar!();
#[macro_use]
mod foo {
macro_rules! bar {
() => ()
}
}
Makra w skrzyniach
Aby użyć macro_rules!makra z innych skrzynek, samo makro potrzebuje atrybutu #[macro_export]. Skrzynka importująca może następnie zaimportować makro przez use crate_name::macro_name;.
Skrzynia util
#[macro_export]
macro_rules! foo {
() => ()
}
Skrzynia user
use util::foo;
foo!();
Zwróć uwagę, że makra zawsze znajdują się na najwyższym poziomie skrzynki; więc nawet gdyby foobył wewnątrz a mod bar {}, userskrzynia nadal musiałaby pisać, use util::foo;a nie use util::bar::foo; .
Przed Rust 2018 trzeba było importować makro z innych skrzynek, dodając atrybut #[macro_use]do extern crate util;instrukcji. Spowoduje to zaimportowanie wszystkich makr z util. Alternatywnie #[macro_use(cat, dog)]można użyć tylko do importowania makr cati dog. Ta składnia nie powinna być już potrzebna.
Więcej informacji można znaleźć w rozdziale poświęconym makrom w języku programowania Rust .
module::my_macro!()?