Я создал функциональный процедурный макрос. Я называю это декларативным макросом в качестве параметра. Я надеялся найти способ расширения декларативного макроса перед обработкой процедурного макроса (или развернуть его внутри процедурного макроса). Пример (код также доступен на https://github.com/Jasperav/rec_macro):
Звоните на сайт:
macro_rules! t {
($e:expr) => {
$e.to_string() + " I am a macro"
}
}
fn main() {
re!(t!("hi"));
}
Pro c ящик для макросов:
#[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 macro
в этом случае (или некоторый тип syn
). В моем случае декларативный макрос всегда должен расширяться до &str
или String
.
Можно ли расширить t
перед вызовом re
или расширить t
вручную внутри программы? c макрос? Я хочу увидеть результат макроса (в данном случае: «Привет, я макрос») внутри моего про c функционала, похожего на макрос.
Спасибо.