如何将字符串连接到宏派生中的标识?
How can I concatenate a string to an ident in a macro derive?
我需要创建一个宏派生,其中名称是函数名称的一部分。 (这段代码不起作用,只是为了说明问题)
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()
}
我该怎么做?
基于quote
的docs,你可以用syn::Ident
构造一个新的标识符:
let fname = format!("{}_logic", name);
let varname = syn::Ident::new(&fname, ident.span());
然后插值:
let gen = quote! {
pub fn #varname() -> Arc<Mutex<UiAplicacion>> {
...
}
我需要创建一个宏派生,其中名称是函数名称的一部分。 (这段代码不起作用,只是为了说明问题)
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()
}
我该怎么做?
基于quote
的docs,你可以用syn::Ident
构造一个新的标识符:
let fname = format!("{}_logic", name);
let varname = syn::Ident::new(&fname, ident.span());
然后插值:
let gen = quote! {
pub fn #varname() -> Arc<Mutex<UiAplicacion>> {
...
}