このコードブロックは、Rubyのクワイン(それ自体を印刷するプログラム)の例としてウィキペディアで見つけました。
puts <<2*2,2
puts <<2*2,2
2
しかし、私はそれがどのように機能するのかわかりません。特に、最後の行を削除すると、次のエラーが発生します。
構文エラー、予期しない$ end、tSTRING_CONTENTまたはtSTRING_DBEGまたはtSTRING_DVARまたはtSTRING_ENDが必要です
それらの行で何が起こりますか?
<<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
であるため、これらのそれぞれに改行が自動的に追加されます)。
Rubyでは、次のように文字列を定義できます
str = <<DELIMITER
long string
on several
lines
DELIMITER
ここから、残りを推測できると思います:)