接受引用宏定义的变量的表达式的宏

问题描述 投票:0回答:1

可以写宏吗:

my_macro!(left + right)

转化为:

{
    let left = 0;
    let right = 1;
    $expr
}

变量在宏内部的什么地方定义?宏的用户知道

left
right
是特殊变量名称。

rust macros hygiene
1个回答
0
投票

出于卫生考虑,声明式宏不能,但非常基本的过程宏可以:

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”。

© www.soinside.com 2019 - 2024. All rights reserved.