プロダクションコードでヒアドキュメントを使うことはあまり無いかもしれないけど、文字列やJSONデータを扱いたいちょっとしたサンプルコードを書くときによく使うのでメモ。
1. 基本
「<<」識別子を使う。「<<」識別子の後ろにヒアドキュメントの始まりと終わりを示す文字列の識別子を書く。
EOS(End Of String)とEOL(End Of Line)が使われている例が多いが、統一されていれば何を使っても問題ない。
json = <<'EOS'
{
"language": "Ruby"
}
EOS
2. 変数・定数の展開をする場合
ヒアドキュメントの始まりと終わりを示す識別子をダブルコーテーションで囲うか、コーテーション無しの識別子を使う。あとは通常の展開記法を用いればOK。
シングルコーテーションを使うと展開されない。
lang = 'language'
RUBY = 'Ruby'
json = <<"EOS" # ここをダブルコーテーションで囲う
{
"#{lang}": "#{RUBY}"
}
EOS
json = <<EOS # コーテーション無しでもOK
{
"#{lang}": "#{RUBY}"
}
EOS
3. 「<<-」演算子を使ってインデントを行う
「<<」の代わりに「<<-」を使うと、終端の識別子をインデントすることができる。
def output
json = <<-"JSON"
{
"language": "Ruby"
}
JSON
# ここのインデントを調整できる
puts json
end
output
「<<」演算子だと以下のようにしかできない。
def output
json = <<"JSON"
{
"language": "Ruby"
}
JSON
# かならず行頭に識別子が無くてはならない
puts json
end
output