How do I create a Rust macro to define a String va

2019-02-21 19:42发布

问题:

I want to write a macro to define something like below:

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

It is possible for me to have a macro:

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

and use it as my_macro!(FOO, "FOO");

However, this is a bit redundant. I expect to have something like my_macro!(FOO), and it can expand and use the $name as identifier, but also in the string value.

回答1:

You want stringify!:

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

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


标签: macros rust