5

我创建了一个类似函数的过程宏。我用声明性宏作为参数来调用它。我希望找到一种在处理过程宏之前扩展声明性宏的方法(或在过程宏内扩展它)。示例(代码也可在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 &stror String

是否可以t在调用之前扩展re,或者t在 proc 宏中手动扩展?我想在我的 proc 函数中看到宏的结果(在这种情况下:“嗨,我是一个宏”),就像宏一样。

谢谢。

4

0 回答 0