5

関数のような手続き型マクロを作成しました。宣言型マクロをパラメーターとして呼び出します。手続き型マクロを処理する前に宣言型マクロを展開する(または手続き型マクロ内で展開する)方法を見つけたいと思っていました。例 (コードはhttps://github.com/Jasperav/rec_macroでも入手できます):

電話サイト:

macro_rules! t {
    ($e:expr) => {
        $e.to_string() + " I am a macro"
    }
}

fn main() {
    re!(t!("hi"));
}

Proc マクロ クレート:

#[proc_macro_hack]
pub fn re(input: TokenStream) -> TokenStream {
    panic!("{:#?}", input) // I can see "hi" and something like t!, but not the result of the macro expansion
}

メッセージ内に、宣言型マクロ ( ) が含まれpanicていることがわかります。この場合(または何らかのタイプ)tの生の値が必要です。私の場合、宣言型マクロは常にまたはに展開する必要があります。hi I am a macrosyn&strString

tを呼び出す前に展開することre、またはtproc マクロ内で手動で展開することは可能ですか? マクロのような機能を備えた proc 内で、マクロの結果 (この場合は「こんにちは、私はマクロです」) を確認したいと考えています。

ありがとう。

4

0 に答える 0