如何创建Rust宏以使用其自己的标识符值定义String变量?

qin*_*oon 10 macros rust

我想写一个宏来定义如下的内容:

let FOO: String = "FOO".to_string();
Run Code Online (Sandbox Code Playgroud)

我有可能有一个宏:

macro_rules! my_macro {
    ($name: ident, $val: expr) => {
        let $name: String = $val.to_string();
    }
}
Run Code Online (Sandbox Code Playgroud)

并用它作为 my_macro!(FOO, "FOO");

但是,这有点多余.我希望有类似的东西my_macro!(FOO),它可以扩展并使用$nameas标识符,但也可以在字符串值中.

DK.*_*DK. 11

你想要stringify!:

macro_rules! str_var {
    ($name:ident) => {
        let $name = String::from(stringify!($name));
    };
}

fn main() {
    str_var!(foo);
    println!("foo: {:?}", foo);
}
Run Code Online (Sandbox Code Playgroud)