Makros in derselben Kiste
#[macro_use]
mod foo {
macro_rules! bar {
() => ()
}
}
bar!();
Wenn Sie das Makro in derselben Kiste verwenden möchten, benötigt das Modul, in dem Ihr Makro definiert ist, das Attribut #[macro_use].
Makros können nur verwendet werden, nachdem sie definiert wurden. Dies bedeutet, dass dies nicht funktioniert:
bar!();
#[macro_use]
mod foo {
macro_rules! bar {
() => ()
}
}
Makros über Kisten
Um Ihr macro_rules!Makro aus anderen Kisten zu verwenden, benötigt das Makro selbst das Attribut #[macro_export]. Die importierende Kiste kann dann das Makro über importieren use crate_name::macro_name;.
Kiste util
#[macro_export]
macro_rules! foo {
() => ()
}
Kiste user
use util::foo;
foo!();
Beachten Sie, dass Makros immer auf der obersten Ebene einer Kiste leben. Selbst wenn fooes sich in einem befinden würde mod bar {}, usermüsste die Kiste immer noch schreiben use util::foo;und nicht use util::bar::foo; .
Vor Rust 2018 mussten Sie Makros aus anderen Kisten importieren, indem Sie das Attribut #[macro_use]zur extern crate util;Anweisung hinzufügen . Das würde alle Makros von importieren util. Alternativ können #[macro_use(cat, dog)]nur die Makros catund importiert werden dog. Diese Syntax sollte nicht mehr erforderlich sein.
Weitere Informationen finden Sie im Kapitel Die Programmiersprache Rust zu Makros .
module::my_macro!()?