Ruby のヒアドキュメント(発展編)
今回は発展編、ということで、あまり知らなくても支障はないんじゃないか的なものの紹介です。
インデントをしている部分で、2 番目の EOS を行頭に書くとソースが汚くなる場合は <<-を使って行頭にスペースを加えることができます。
if true
my_str =<<-EOS
abc
def
EOS
end
この場合、abc や def の行頭のスペースは文字列として my_str に代入されますが、2 番目の EOS の行頭のスペースは、文字列として my_str に代入されません。
my_str = " abc\n def\n"
識別子(ここでは EOS を使用) をバックスラッシュで囲むとコマンドを実行します。
my_str2 =<<`EOS`
pwd
ls
cd ..;pwd
EOS
複数のヒアドキュメントを一行で指定することもできます。
date_today = "2008/09/10"
my_str3, my_str4 =<<"EOS1", <<"EOS2"
It is sunny!
Very comfy!!
#{date_today}
EOS1
I gotta clean my room.
Duhhhhh.
#{date_today}
EOS2
my_str3 には "It is sunny!\nVery comfy!!\n\n2008/09/10\n"
my_str4 には "I gotta clean my room.\nDuhhhhh.\n\n2008/09/10\n"
が入ります。
文の途中にヒアドキュメントを指定することができます。うーん、使い道があるんだろうか。
my_str5 = "<html><body>" + <<"EOS" + "</body></html>"
<p>B'z is great</p>
<p>Take 5 is nice by Kleenex</p>
<p>Take 2 is Azumax and Fukazawax</p>
EOS
ヒアドキュメントに続けてStringクラスのメソッドを書くこともできます。
aichi =<<"EOS".split("\n")
ミソカツ
えびふりゃあ
トヨタ
モーニングセット
EOS
aichi = ["ミソカツ","えびふりゃあ","トヨタ","モーニングセット"]
【広告】
COMMENT
なるほどfind_by_sqlで使うには大変便利な機能ですね。
コメントのお礼にYuguiさんの本をこのブログのamazonスポンサー枠に掲載したいと思います!
ガッポガッポ$$$の手助けが少しでも出来ればと思います、なんちゃって。
ExampleModel.find_by_sql(<<-"SQL", {:param1 => value1, :param2 => value2)
/* 長いSQL */
SQL