如何在宏派生中将字符串连接到标识符?

7

我需要创建一个宏,其中名称是函数名称的一部分。(此代码不起作用,仅用于显示问题)

fn impl_logic(ast: &syn::DeriveInput) -> TokenStream {
    let name:&syn::Ident = &ast.ident;

    let gen = quote! {
       pub fn #name_logic() -> Arc<Mutex<UiAplicacion>> {
           ...
       }
    };

    gen.into()
}

我该如何做到这一点?

2个回答

9

根据quote文档,您可以使用syn::Ident构建新标识符。

let fname = format!("{}_logic", name);
let varname = syn::Ident::new(&fname, ident.span());

接着插值:

let gen = quote! {
   pub fn #varname() -> Arc<Mutex<UiAplicacion>> {
       ...
   }

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接