Makro dalam peti yang sama
#[macro_use]
mod foo {
macro_rules! bar {
() => ()
}
}
bar!();
Jika Anda ingin menggunakan makro di peti yang sama, modul yang ditentukan makro Anda membutuhkan atribut #[macro_use]
.
Makro hanya dapat digunakan setelah ditentukan. Ini berarti ini tidak berhasil:
bar!();
#[macro_use]
mod foo {
macro_rules! bar {
() => ()
}
}
Makro melintasi peti
Untuk menggunakan macro_rules!
makro Anda dari peti lain, makro itu sendiri membutuhkan atribut #[macro_export]
. Peti pengimpor kemudian dapat mengimpor makro melalui use crate_name::macro_name;
.
Peti util
#[macro_export]
macro_rules! foo {
() => ()
}
Peti user
use util::foo;
foo!();
Perhatikan bahwa makro selalu berada di level teratas dari sebuah peti; jadi meskipun foo
akan berada di dalam a mod bar {}
, user
peti itu masih harus menulis use util::foo;
dan tidak use util::bar::foo;
.
Sebelum Rust 2018, Anda harus mengimpor makro dari peti lain dengan menambahkan atribut #[macro_use]
ke extern crate util;
pernyataan tersebut. Itu akan mengimpor semua makro dari util
. Atau, #[macro_use(cat, dog)]
dapat digunakan untuk hanya mengimpor makro cat
dan dog
. Sintaks ini seharusnya tidak diperlukan lagi.
Informasi lebih lanjut tersedia di bab Bahasa Pemrograman Rust pada makro .
module::my_macro!()?