可以写宏吗:
my_macro!(left + right)
转化为:
{
let left = 0;
let right = 1;
$expr
}
变量在宏内部的什么地方定义?宏的用户知道
left
和 right
是特殊变量名称。
出于卫生考虑,声明式宏不能,但非常基本的过程宏可以:
use proc_macro2::TokenStream;
#[proc_macro]
pub fn foo(i: proc_macro::TokenStream) -> proc_macro::TokenStream {
let i: TokenStream = i.into();
quote::quote! {
{
let x = 1;
#i
}
}
.into()
}
调用时:
println!("{}", foo!(x));
将打印“1”。