Как объединить токен сразу после переменной внутри макроса `quote!`? - PullRequest
0 голосов
/ 23 января 2020
use quote::quote;

fn main() {
    let name = "foo";
    let res = quote!(#name bar);
    println!("{:?}", res.to_string());
}

Приведенный выше код печатает "\"foo\" bar". Пожалуйста, попробуйте запустить его здесь на Rust Playground.

Как настроить его так, чтобы сделать единичный идентификатор из переменной части и суффикс константы?

Я хочу использовать quote! возвращаемое значение в производном макросе. Как избавиться от символов двойной кавычки?

Ответы [ 2 ]

2 голосов
/ 23 января 2020

Поскольку вам нужно только заключить в кавычки строку, как насчет сочетания использования quote! и format!?

use quote::quote;

fn main() {
    let name = "foo";
    let res = format!("{} {}", name, quote!(bar));
    println!("{:?}", res.to_string());
}

детская площадка .

Если вы нужна дополнительная цитата в результате:

use quote::quote;

fn main() {
    let name = "foo";
    let res = format!("\"{}{}\"", name, quote!(bar));
    println!("{:?}", res.to_string());
}

детская площадка .

0 голосов
/ 04 февраля 2020

Я нашел дополнительную часть решения, которая мне нужна, поверх ответа Псидома в этом блоге .

use quote::quote;
use syn;

fn main() {
    let foo = "foo";
    let foobar = syn::Ident::new(&format!("{}bar", foo), syn::export::Span::call_site());
    let q = quote!(#foobar);
    println!("{}", q);
}

Детская площадка .

...