Как сделать макрокоманду развернутой перед тем, как привести ее в 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. Как я могу это сделать?

0 ответов

Другие вопросы по тегам