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