JanGaJan.com

Is fun? JOY!

Rubyのヒアドキュメント

あまり使う機会もなく理解できていない部分があったのでヒアドキュメントについて整理しました。
ヒアドキュメントって、heredocumentなんですね。hearだと思ってた…

参考にしたのは2.1のドキュメントです。

書き方

1
2
3
4
5
print <<EOS  # <<の後に空白を入れたらエラー
  hoge
  fuga
EOS
# 終了ラベルは行頭から始める必要がある

<<-

末尾のEOSの前にインデントを入れてもOK

<<‘EOS’

開始ラベルをシングルクォーテーションで囲んだ場合、ヒアドキュメント内で文字列展開しない

<<“EOS”

開始ラベルをダブルクォーテーションで囲んだ場合、ヒアドキュメント内で文字列展開する

<<`EOS`

開始ラベルをバッククォートで囲んだ場合、ヒアドキュメント内のコマンドの実行結果を表示する

複数指定

1
2
3
4
5
6
7
8
9
10
11
print <<EOS1, <<EOS2
  eos1
EOS1  # ここまでがEOS1のヒアドキュメント、これ以降はEOS2のヒアドキュメント
  eos2
EOS2
# ここまでがEOS2のヒアドキュメント、  
  eos1
EOS1  # ここまでがEOS1のヒアドキュメント、これ以降はEOS2のヒアドキュメント
  eos2
EOS2
# ここまでがEOS2のヒアドキュメント、  

EOS1終了ラベルを書く前にEOS2終了ラベルを書いたとしても、EOS1終了ラベルが出てくるまで、EOS1のヒアドキュメントとなる

その他

開始ラベルの次の行からヒアドキュメントになる

読みづらいからあまりしないと思うけれど、例えば

1
2
3
printf('%s%d', <<EOS, 1000)
  hoge
EOS

という場合に、こうしたらエラー。

1
2
3
4
printf('%s%d', <<EOS
             , 1000)
  hoge
EOS

コメントの不自然はご愛嬌です。嘘です。一番最後に表示したことで、表示がおかしくなったためです。
また何かあったら追記します。

Comments