了解红宝石奎因



我在维基百科上找到了这个代码块,作为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

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

相关内容

  • 没有找到相关文章

最新更新