我在 Wikipedia 上找到了这个代码块作为 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 借用 - 它基本上是一个多行字符串文字,从 the 之后的<<
行开始,以 . 开头的行结束something
。
所以在结构上,程序就是这样做的:
puts str*2,2
...也就是说,打印两份str
后跟数字 2。
但它不是变量str
,而是通过一个此处文档包含一个文字字符串,其结尾标记也是数字 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
我想从这里,你可以猜到其余的:)