在不同的文件中使用宏

vbe*_*nar 2 macros module rust

我正在建立一个图书馆,我有以下结构:

源代码/库.rs

mod a;
mod b;
Run Code Online (Sandbox Code Playgroud)

src/b.rs:

macro_rules! x ...
Run Code Online (Sandbox Code Playgroud)

源代码/a.rs:

x!()
Run Code Online (Sandbox Code Playgroud)

这不起作用。我试着拨弄#macro_export#macro_use,但没有成功。在同一个库中但在不同的模块和文件中重用宏的正确方法是什么?

Vla*_*eev 7

为了使子模块中的宏对“兄弟”模块可见,它们必须按特定顺序声明,也就是说,应首先声明具有宏的模块。它还应该#[macro_use]附加属性。这应该有效:

#[macro_use] mod b;
mod a;
Run Code Online (Sandbox Code Playgroud)

#[macro_use] 属性使模块中的宏对模块声明“下方”的所有代码可见,这就是您的原始变体不可能工作的原因。