Macro trong cùng một thùng
#[macro_use]
mod foo {
macro_rules! bar {
() => ()
}
}
bar!();
Nếu bạn muốn sử dụng macro trong cùng một thùng, mô-đun mà macro của bạn được xác định cần thuộc tính #[macro_use]
.
Macro chỉ có thể được sử dụng sau khi chúng đã được xác định. Điều này có nghĩa là điều này không hoạt động:
bar!();
#[macro_use]
mod foo {
macro_rules! bar {
() => ()
}
}
Macro trên các thùng
Để sử dụng macro_rules!
macro của bạn từ các thùng khác, bản thân macro cần thuộc tính #[macro_export]
. Sau đó, thùng nhập có thể nhập macro qua use crate_name::macro_name;
.
Thùng util
#[macro_export]
macro_rules! foo {
() => ()
}
Thùng user
use util::foo;
foo!();
Lưu ý rằng macro luôn ở cấp cao nhất của thùng; vì vậy ngay cả khi foo
sẽ ở bên trong a mod bar {}
, user
thùng vẫn phải ghi use util::foo;
và không use util::bar::foo;
.
Trước Rust 2018, bạn phải nhập macro từ các thùng khác bằng cách thêm thuộc tính #[macro_use]
vào extern crate util;
câu lệnh. Điều đó sẽ nhập tất cả các macro từ util
. Ngoài ra, #[macro_use(cat, dog)]
có thể được sử dụng để chỉ nhập các macro cat
và dog
. Cú pháp này không cần thiết nữa.
Thông tin thêm có sẵn trong chương Ngôn ngữ lập trình Rust về macro .
module::my_macro!()?