代码参见 [1],运行很简单:
ruby rquine.rb
即可。官方说明略繁琐,可以自己简单试试,删掉 rquine.rb 中的任意一个字符(有时候甚至两个字符也可以,但不保证),程序还能正常运行并依然输出自身。
当然,能输出自身的程序并不罕见,这类程序叫 quine,得命于大名鼎鼎的奎因 [2],甚至有个网站 [3] 搜集了各类语言的多种实现,有兴趣的朋友可以去瞧瞧。
但能删掉任意一个字符而保持正常,在下才学浅陋,也不熟悉 Ruby,就真的看不出门道了。按一般情况,删掉关键字、变量名或者某个引号等等,几乎肯定会导致语法错误。但这个程序它、它、它竟然不出错,而且还能输出(原本的)自身。我只能感叹神人太多。
Hacker News 上的讨论 [4] 给出了一些线索,有人指出 [5] 第15 和 17 行是关键,但问题就是,你也可以删掉这两行中的某个任意位置的字符啊,程序仍然正确……
希望 v 站大牛予以解惑;或更进一步的,其他语言(GitHub 上另有 Perl 实现)有可能吗?强类型如 Java 有可能吗?
[1]
https://github.com/mame/radiation-hardened-quine[2]
http://zh.wikipedia.org/wiki/%E5%A8%81%E6%8B%89%E5%BE%B7%C2%B7%E5%86%AF%C2%B7%E5%A5%A5%E6%9B%BC%C2%B7%E8%92%AF%E5%9B%A0[3]
http://www.nyx.net/~gthompso/quine.htm[4]
https://news.ycombinator.com/item?id=7276976[5]
https://news.ycombinator.com/item?id=7277377