我正在使用this sample作为基础实现宏。我现在想在宏扩展代码中使用quote_expr!
:
fn expand_macro<'cx>(
cx: &'cx mut ExtCtxt,
sp: Span,
_: &[TokenTree]
) -> Box<MacResult + 'cx> {
let expr = quote_expr!(cx, { const A: u32 = 10; });
MacEager::expr(expr)
}
编译器错误,因为未定义quote_expr!
。
我发现quote_expr!
是通过类似于expand_macro
函数的机制在base.rs中定义的。
我的主包有一个build.rs
,可以通过扩展宏从main.rs
生成src/main.rs.in
。我在第二个箱子中有一个expand_macro
功能,它使用来自主箱的build.rs
。
要使用quote_expr!
,我应该有三个包,其中两个包含build.rs
吗?
是否有更简单的方法来编写表达式,可能是将它放在一个字符串中并调用解析器来生成一个令牌树?