6

このコードブロックは、Rubyのクワイン(それ自体を印刷するプログラム)の例としてウィキペディアで見つけました。

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

しかし、私はそれがどのように機能するのかわかりません。特に、最後の行を削除すると、次のエラーが発生します。

構文エラー、予期しない$ end、tSTRING_CONTENTまたはtSTRING_DBEGまたはtSTRING_DVARまたはtSTRING_ENDが必要です

それらの行で何が起こりますか?

4

2 に答える 2

6

<<something構文はPerl を介して UNIX シェルから借用したヒアドキュメントで始まります。これは基本的に、 の後の行で<<始まり、 で始まる行で終わる複数行の文字列リテラルですsomething

したがって、構造的には、プログラムは次のことを行っているだけです。

puts str*2,2

...つまり、 を 2 部印刷し、strその後に番号 2 を付けます。

しかし、 variable の代わりに、str末尾のセンチネルも数字の 2 であるヒアドキュメントを介してリテラル文字列を含めています。

puts <<2*2,2
puts <<2*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 に答える