我创建了一个类似函数的过程宏。我用声明性宏作为参数来调用它。我希望找到一种在处理过程宏之前扩展声明性宏的方法(或在过程宏内扩展它)。示例(代码也可在https://github.com/Jasperav/rec_macro获得):
调用站点:
macro_rules! t {
($e:expr) => {
$e.to_string() + " I am a macro"
}
}
fn main() {
re!(t!("hi"));
}
Proc 宏箱:
#[proc_macro_hack]
pub fn re(input: TokenStream) -> TokenStream {
panic!("{:#?}", input) // I can see "hi" and something like t!, but not the result of the macro expansion
}
在panic
消息中,我看到声明性宏 ( t
) 在里面。hi I am a macro
我只想要在这种情况下(或某种syn
类型)的原始值。就我而言,声明性宏应始终扩展为 a &str
or String
。
是否可以t
在调用之前扩展re
,或者t
在 proc 宏中手动扩展?我想在我的 proc 函数中看到宏的结果(在这种情况下:“嗨,我是一个宏”),就像宏一样。
谢谢。