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 fooakan berada di dalam a mod bar {}, userpeti 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 catdan dog. Sintaks ini seharusnya tidak diperlukan lagi.
Informasi lebih lanjut tersedia di bab Bahasa Pemrograman Rust pada makro .
module::my_macro!()?