Quine是一个自我复制的代码。例如,如果groovy中的代码如下所示:
def s = 20
当我运行上面的代码时,我应该将程序语句作为输出。所以上面的代码应该产生:
def s = 20 //as this is my input..
正如我在Groovy Console中看到的那样,我开始了解常规支持Quine:
s='s=\\\';s[0..1]+s[3]+s[0..1]+s[2]*6+s[3..-1]*2';s[0..1]+s[3]+s[0..1]+s[2]*6+s[3..-1]*2
但我不知道它是如何运作的!任何人都可以说我,上面链接中的代码是如何工作的?
提前致谢!
答案 0 :(得分:5)
有问题的代码是:
s='s=\\\';s[0..1]+s[3]+s[0..1]+s[2]*6+s[3..-1]*2';s[0..1]+s[3]+s[0..1]+s[2]*6+s[3..-1]*2
因此,左边的语句定义了一个字符串,然后右边的语句将字符串的不同位加在一起:
如果我们添加以下内容以打印出它正在做的事情:
println s[0..1]
println s[3]
println s[0..1]
println s[2] * 6
println s[3..-1] * 2
我们得到输出:
s=
'
s=
\\\
';s[0..1]+s[3]+s[0..1]+s[2]*6+s[3..-1]*2';s[0..1]+s[3]+s[0..1]+s[2]*6+s[3..-1]*2
如果你把所有这些字符串加在一起,就会得到原始程序。