我试图仅使用宏在Rust中编写一个quine。
为此,我将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
在被字符串化之前先进行扩展,以使该程序成为奎因。我该怎么办?