如何使用引号在 proc_macro 中插入函数参数标识符?

问题描述

我的目标是编写一个简单的属性 proc 宏,可用于注释函数并打印其参数。

示例:

#[print_arguments]
fn add(a:u64,b:u64) -> u64 {
   a + b
}

使用 quote 我可以在范围内插入标记,并使用 syn 解析 Rust 代码片段。所以我尝试了以下方法

#[proc_macro_attribute]
pub fn print_arguments(_: TokenStream,item: TokenStream) -> TokenStream {
    let fn_type = parse_macro_input!(item as ItemFn);
    let signature = fn_type.sig;
    let ident = signature.ident;
    let arguments = signature.inputs;
    let return_type = signature.output;

    let mut args = arguments.iter();
    let fn_arg = args.next().expect("msg");

    let block = fn_type.block;

    TokenStream::from(quote! {
        fn #ident ( #arguments ) #return_type {
            println!("enhanced function {:?}",#(#args)*); // this one seems wrong,as it would iterate over FnArg,which is an enum. 
            #block
        }
    })
}

是否有可能访问 FnArg 标识符(标识符)?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...