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

Exporting declarative macro that uses functions defined in crate

我正在尝试导出一个宏,该宏使用了 crate 中定义的某些函数。例如在名为 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
  }
}

我试过使用 use 的各种组合来导入 a 但错误总是显示宏定义说 unresolved import crateunresolved import a_macro_a_day.

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

在声明性宏中,您应该使用 $crate 来访问当前 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
}