6

我在 Wikipedia 上找到了这个代码块作为 Ruby 中 quine(打印自身的程序)的示例。

puts <<2*2,2
puts <<2*2,2
2

但是,我不明白它是如何工作的。特别是,我没有得到的是,当我删除最后一行时,我收到了这个错误:

语法错误,意外 $end,需要 tSTRING_CONTENT 或 tSTRING_DBEG 或 tSTRING_DVAR 或 tSTRING_END

这些行会发生什么?

4

2 回答 2

6

<<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,所以这些内容中的每一个都会自动附加一个换行符。)

于 2012-06-03T19:49:35.567 回答
2

在 ruby​​ 中,您可以定义字符串

str = <<DELIMITER
  long string
  on several
  lines
DELIMITER

我想从这里,你可以猜到其余的:)

于 2012-06-03T19:46:09.530 回答