我在维基百科上发现了这个代码块,作为一个在Ruby中打印的quine(打印程序)的例子。
puts <<2*2,2
puts <<2*2,2
2
但是,我不知道它是如何工作的。特别是,我没有得到的是,当我删除最后一行时,我收到此错误:
语法错误,意外的$ end,期待tSTRING_CONTENT或tSTRING_DBEG或tSTRING_DVAR或tSTRING_END
这些行会发生什么?
答案 0 :(得分:6)
<<something
语法从 here-document 开始,通过Perl从UNIX shell中借用 - 它基本上是一个多行字符串文字,从<<
之后的行开始并结束当一行以something
开头时。
结构上,该计划只是这样做:
puts str*2,2
...也就是说,打印两份str
后跟数字2。
但是它不是变量str
,而是通过here-document包含一个文字字符串,其结尾的sentinel也是数字2:
puts <<2*2,2
puts <<2*2,2
2
因此它打印出字符串puts <<2*2,2
的两个副本,然后是2.(因为用于打印出来的方法是puts
,所以这些内容中的每一个都会自动附加换行符。 )
答案 1 :(得分:1)
在ruby中,您可以使用
定义字符串str = <<DELIMITER
long string
on several
lines
DELIMITER
我想从这里开始,您可以猜到其余部分:)