我正在尝试仅使用宏在 Rust 中编写一个 quine。为了做到这一点,我将main
函数嵌入到宏f1
中,并尝试嵌入f1
in f2
with的文字表示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
在被字符串化之前进行扩展,以便程序能够运行。我怎样才能做到这一点?