导出使用 crate 中定义的函数的声明性宏

twi*_*itu 3 macros rust rust-crates rust-macros

我正在尝试导出一个使用包中定义的某些函数的宏。像这样的东西,例如在一个名为的板条箱中a_macro_a_day

// lib.rs

pub fn a() {}

#[macro_export]
macro_rules! impl_helper_funcs {
  use crate::a; // error unresolved import
  use a_macro_a_day::a; // error unresolved import
  fn b() {
    ...
    a() // call imported a here
  }
}
Run Code Online (Sandbox Code Playgroud)

我尝试过使用各种组合use来导入a,但错误总是显示宏定义为unresolved import crateor unresolved import a_macro_a_day

我不想采用过程宏方式,因为这只是为了减少代码重复。有没有办法导出导入本地(但公共)函数的宏?

Spr*_*ite 7

在声明性宏中,您应该使用$crate来访问当前包中的项目。并且您的宏声明缺少匹配项和正文。

尝试这个:

// lib.rs

pub fn a() {}

#[macro_export]
macro_rules! impl_helper_funcs {
 // vvvvvvv add this
    () => {
        use $crate::a;
        //  ^ add this
        fn b() {
            // ...
            a() // call imported a here
        }
    };
 // ^^ add this
}
Run Code Online (Sandbox Code Playgroud)