JavaScript 中的奎因
Quine 是一个不接受任何输入但输出其自身代码副本的程序。与其他语言不同,用 JavaScript/NodeJS 编写 Quine 非常容易。使用的方法是 JavaScript 中的任何函数都可以转换为字符串并可以打印。这允许我们输出函数的代码,如下所示:
例子:
Javascript
function quine() { console.log(quine.toString()) }
Javascript
;
Javascript
;
Javascript
($=_=>`($=${$})()`)()
Javascript
$ = _ => `$=${$}`
Javascript
throw 0
^
0
示例:上面的函数打印了自己的源代码,但不是可以执行的文件。 我们将添加一个语句以便调用它。
Javascript
;
输出:
"function quine() { window.runnerWindow.proxyConsole.log
(quine.toString()+\" quine();\") } quine();"
注意:我们需要在日志语句中添加一些额外的东西来实现我们的目标。最后的`;`是不需要的。
我们可以让它更优雅。我们知道,只要使用 IIFE(立即调用函数表达式)定义函数,JavaScript 就可以使函数立即运行。我们将把它合并到我们的代码中,如下所示:
例子:
Javascript
;
输出:
"( function quine() { window.runnerWindow.proxyConsole.log
(\"( \" + quine.toString() + \" )()\") } )()"
请注意,console.log() 语句是根据需要操作的。我们可以通过将箭头运算符和格式字符串添加到这个等式中来进一步使它更漂亮。这将产生如下代码。
例子:
Javascript
($=_=>`($=${$})()`)()
为了理解代码,我们删除了格式字符串中的 IIFE 和额外的括号。添加间距以使其更加清晰。第一个`$` 是一个包含箭头函数的变量。 `_` 是未使用的箭头函数的随机参数。在箭头之后,这是我们的格式字符串,可以分为两部分,字符串,“$=”和变量,它首先是`$`本身。
例子:
Javascript
$ = _ => `$=${$}`
Quine 必须是可执行的,但这并不意味着导致错误的程序不能是 Quine。下面的示例仍然是 Quine 的示例。该程序在 NodeJS 的帮助下作为 .js 文件执行时会输出其自己的源代码。 NodeJS 在第一行返回一个错误,其余代码是错误的样子。
例子:
Javascript
throw 0
^
0