相关疑难解决方法(0)

如何在程序宏中获取文字的值和类型?

我正在实现一个类似函数的程序宏,它将单个字符串文字作为参数,但我不知道如何获取字符串文字的值。

如果我打印变量,它会显示一堆字段,其中包括类型和值。他们显然就在那里,在某个地方。我如何获得它们?

extern crate proc_macro;
use proc_macro::{TokenStream,TokenTree};

#[proc_macro]
pub fn my_macro(input: TokenStream) -> TokenStream {
    let input: Vec<TokenTree> = input.into_iter().collect();
    let literal = match &input.get(0) {
        Some(TokenTree::Literal(literal)) => literal,
        _ => panic!()
    };

    // can't do anything with "literal"
    // println!("{:?}", literal.lit.symbol); says "unknown field"

    format!("{:?}", format!("{:?}", literal)).parse().unwrap()
}
Run Code Online (Sandbox Code Playgroud)
#![feature(proc_macro_hygiene)]
extern crate macros;

fn main() {
    let value = macros::my_macro!("hahaha");
    println!("it is {}", value);
    // prints "it is Literal { lit: Lit { kind: Str, symbol: "hahaha", suffix: None }, …
Run Code Online (Sandbox Code Playgroud)

rust

8
推荐指数
2
解决办法
1740
查看次数

标签 统计

rust ×1