2016-10-31 3 views
4

私は以下のようなものを定義するマクロを書きたい: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を展開して使用するだけでなく、文字列の値としても使用できます。

答えて

7

あなたはstringify!たい:

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

fn main() { 
    str_var!(foo); 
    println!("foo: {:?}", foo); 
} 
関連する問題