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 foosẽ ở bên trong a mod bar {}, userthù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 catvà 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!()?