###ヒアドキュメントとは
文字列をソースコード中に埋め込むための方法の一つ。
ヒアドキュメントを使うことで複数行に渡る長い文字列をすっきり書くことができます。
###書き方
<<識別子
1行目
2行目
3行目
識別子
識別子は自由に付けることができます。
どのような文字でも構いませんが「EOS」などがよく使われているようです。(EOS=End of String)
(ただし、識別子と記述する文字列内の文字がかぶらないように注意してください。)
###利用例
<<EOS
ヒアドキュメントを解説しています。
ヒアドキュメントをうまく使うと便利です。
EOS
#=> ヒアドキュメントを解説しています。
#=> ヒアドキュメントをうまく使うと便利です。
ヒアドキュメントは文字列と同じく変数へ格納することができます。
さらに開始ラベルの<<識別子は1つの式と見なされます。
そのため<<識別子をメソッドに引数として渡したり、<<識別子をレシーバとしてメソッドの呼び出しをすることができます。
###ヒアドキュメント内で式展開をする
ヒアドキュメントの中で式展開することができます。
name = 'TEXT'
<<Text
EOSとは識別子が違います。
このヒアドキュメントの識別子は#{name}です。
Text
#=> EOSとは識別子が違います。
#=> このヒアドキュメントの識別子はTEXTです。
###ヒアドキュメント内の式展開を無効化する
<<'識別子'のように、識別子をシングルクオーテーションで囲んだ場合は、文字列をシングルクオーテーションで囲んだ時と同じ扱いとなり式展開が無効化されます。
一方で、<<"識別子"のようにダブルクオーテーションで囲んだ時は式展開が有効になります。
name = 'TEXT'
<<'Text'
EOSとは識別子が違います。
このヒアドキュメントの識別子は#{name}です。
Text
#=> EOSとは識別子が違います。
#=> このヒアドキュメントの識別子は#{name}です。
「<<-識別子」と「<<~識別子」の違い
「<<-識別子」のように-を入れると「最後の識別子」の前の空白やタブが無視されるので、「最後の識別子」を自由にインデントさせることができます。
「<<~識別子」のように~を入れると「ヒアドキュメント内部文字列」の前の空白やタブが無視されるので、「文字列全体」を自由にインデントさせることができます。
###引用元
「プロを目指す人のためのRuby入門」から一部引用
ヒアドキュメントによる複数行文字列の作成から引用
https://www.javadrive.jp/ruby/string/index4.html