如何创建一个Rust宏来定义一个字符串变量,其值为其自身标识符?

14

我想编写一个宏来定义类似以下的内容:

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个回答

23

您想使用stringify!

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

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

很遗憾,你似乎不能在属性中使用“stringify”。 - Hutch Moore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接