导出使用 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 crate
或 unresolved 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
}
我正在尝试导出一个宏,该宏使用了 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 crate
或 unresolved 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
}