如何在 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 中的宏有特殊的工作方式,但不知道如何正确使用它们。