给出一个字符串(str
),如何在Rust中将其转换为TokenStream
?
我尝试使用quote!
宏。
let str = "4";
let tokens = quote! { let num = #str; }; // #str is a str not i32
这里的目标是为一些未知的代码字符串生成令牌。
let thing = "4";
let tokens = quote! { let thing = #thing }; // i32
或
let thing = ""4"";
let tokens = quote! { let thing = #thing }; // str
答案 0 :(得分:3)
一个人如何将[字符串]转换为
TokenStream
当转换可能失败时,Rust具有将字符串转换为值的共同特征:FromStr
。通常可以通过&str
上的parse
方法来访问它。
proc_macro2::TokenStream
use proc_macro2; // 0.4.24
fn example(s: &str) {
let stream: proc_macro2::TokenStream = s.parse().unwrap();
}
proc_macro::TokenStream
extern crate proc_macro;
fn example(s: &str) {
let stream: proc_macro::TokenStream = s.parse().unwrap();
}