Macros 如何创建一个Rust宏来定义一个具有自己标识符值的字符串变量?

Macros 如何创建一个Rust宏来定义一个具有自己标识符值的字符串变量?,macros,rust,Macros,Rust,我想编写一个宏来定义如下内容: let FOO: String = "FOO".to_string(); 我可以有一个宏: macro_rules! my_macro { ($name: ident, $val: expr) => { let $name: String = $val.to_string(); } } 并将其用作my_宏!(FOO,“FOO”) 然而,这有点多余。我希望有类似于myu宏的东西!(FOO),它可以展开并使用$name作为标识

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

let FOO: String = "FOO".to_string();
我可以有一个宏:

macro_rules! my_macro {
    ($name: ident, $val: expr) => {
        let $name: String = $val.to_string();
    }
}
并将其用作my_宏!(FOO,“FOO”)

然而,这有点多余。我希望有类似于
myu宏的东西!(FOO)
,它可以展开并使用
$name
作为标识符,但也可以在字符串值中使用。

您需要:


很遗憾,您似乎无法在属性中使用
stringify
macro_rules! str_var {
    ($name:ident) => {
        let $name = String::from(stringify!($name));
    };
}

fn main() {
    str_var!(foo);
    println!("foo: {:?}", foo);
}