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 foo
es sich in einem befinden würde mod bar {}
, user
mü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 cat
und importiert werden dog
. Diese Syntax sollte nicht mehr erforderlich sein.
Weitere Informationen finden Sie im Kapitel Die Programmiersprache Rust zu Makros .
module::my_macro!()?