我正在建立一个图书馆,我有以下结构:
src / lib.rs
mod a;
mod b;
的src / b.rs:
macro_rules! x ...
的src / a.rs:
x!()
这不起作用。我试图摆弄#macro_export
和#macro_use
,但没有成功。在同一个库中但在不同的模块和文件中重用宏的正确方法是什么?
答案 0 :(得分:3)
为了使子模块中的宏对“兄弟”模块可见,它们必须按特定顺序声明,也就是说,应该将具有宏的模块声明为第一个。它还应附加#[macro_use]
属性。这应该有效:
#[macro_use] mod b;
mod a;
#[macro_use]
属性使模块中的宏对模块声明“下方”的所有代码可见,这就是原始变体无法工作的原因。