如何使用 proc_macro 为引用中的宏插值函数提供枚举索引?

gla*_*gel 2 rust rust-proc-macros

我已经实现了以下 proc_macro ,它需要

builtin_method!(hello_world(a, b, c) {
    println!("{} {} {}", a, b, c);
}
Run Code Online (Sandbox Code Playgroud)

并且应该生成

pub fn hello_world(args: Vec<String>) {
    let a = args.get(0).unwrap();
    let b = args.get(1).unwrap();
    let c = args.get(2).unwrap();

    println!("{} {} {}", a, b, c);
}
Run Code Online (Sandbox Code Playgroud)

这是我当前的代码。

builtin_method!(hello_world(a, b, c) {
    println!("{} {} {}", a, b, c);
}
Run Code Online (Sandbox Code Playgroud)

在变量插值内部,我需要某种枚举变量进行计数。根据文档,没有这样的方法。

我怎样才能更好地实现这一点而不是向上计数_i

pub fn hello_world(args: Vec<String>) {
    let a = args.get(0).unwrap();
    let b = args.get(1).unwrap();
    let c = args.get(2).unwrap();

    println!("{} {} {}", a, b, c);
}
Run Code Online (Sandbox Code Playgroud)

Cha*_*man 5

使用标准Iterator::enumerate()

let arguments = arguments.into_iter().enumerate().map(|(index, arg)| quote! {
    let mut #arg = args.get(#index).unwrap().clone();
});
let gen = quote! {
    pub fn #function(args: Vec<String>) {
        let mut _i = 0;
        #(#arguments)*
        #body
    }
};
Run Code Online (Sandbox Code Playgroud)