Как сделать макрокоманду развернутой перед тем, как привести ее в Rust?
Я пытаюсь написать quine в Rust, используя только макросы. Для этого я встраиваю main
функция в макрос f1
и пытается вставить буквальное представление f1
в f2
с stringify!
,
Вот мой код до сих пор:
macro_rules!f1{()=>(fn main(){println!("macro_rules!{}\nmacro_rules!f2{{($x:expr)=>(stringify!($x))}}\nf1!();",f2!(f1));})}
macro_rules!f2{($x:expr)=>(stringify!($x))}
f1!();
Выход, что неудивительно:
macro_rules!f1
macro_rules!f2{($x:expr)=>(stringify!($x))}
f1!();
Что мне нужно для f1
расширяться перед тем, как быть зачеркнутым, чтобы программа была quine. Как я могу это сделать?