Avatar ·

如何在 Rust 中跨模块文件使用宏?

大家好!我是 Rust 新手,在尝试于项目不同文件中使用宏时遇到了问题。我有一个带模块结构的库,想在一个模块文件中定义宏,然后在另一个文件中使用它。 以下是我的简化项目结构: ``` src/ ├── main.rs ├── macros.rs └── utils/ └── mod.rs ``` 在 `macros.rs` 文件中,我声明了一个简单的宏: ```rust macro_rules! say_hello { () => { println!("Hello from macro!"); }; } ``` 然后在 `main.rs` 中,我这样引入模块: ```rust mod macros; mod utils; fn main() { say_hello!(); // 正常工作! utils::do_something(); } ``` 而在 `utils/mod.rs` 中,我尝试调用同一个宏: ```rust pub fn do_something() { say_hello!(); // 错误:找不到宏 } ``` 编译器报错 `error: cannot find macro 'say_hello' in this scope`。我了解到 Rust 中的宏有特殊的工作方式,但不知道如何正确使用它们。