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

时间:2016-10-31 06:24:19

标签: macros rust

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

let FOO: String = "FOO".to_string();

我可以拥有一个宏:

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

并将其用作my_macro!(FOO, "FOO");

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

1 个答案:

答案 0 :(得分:10)

您想要stringify!

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

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