【发布时间】:2019-05-27 02:03:17
【问题描述】:
我正在定义一个像这样定义其他宏的宏:
macros.rs
#[macro_export]
macro_rules! m1 {
() => {
#[macro_export]
macro_rules! m2 {
() => {}
}
}
}
m1!();
m2!(); // no problem;
我可以通过use {{crate_name}}::macros::* 在另一个板条箱中使用m2!,我可以在macros.rs 中使用m2!,但我不知道如何在同一个板条箱中的文件中使用m2!。
lib.rs
#[macro_use]
pub mod macros;
pub mod test;
pub mod test2;
test.rs(与 macros.rs 在同一个 crate 中)
use crate::m1; // no problem
use crate::m2; // ERROR: macro-expanded `macro_export` macros from the current crate cannot be referred to by absolute paths
m1!(); // no problem
m2!(); // error, no m2
test2.rs
use crate::*;
m2!(); // this works, but I don't really want to use crate::*
examples/yo.rs
use {{crate_name}}::m2;
m2!(); // no problem
在同一个 crate 的其他文件中使用 m2 宏的正确方法是什么?我正在使用 Rust 1.31.1。
【问题讨论】: