Ruby のヒアドキュメントのあまり見かけない使い方
最近知った Ruby のヒアドキュメントのあまり見かけない(?)機能をいくつか備忘録としてまとめてみました。
メソッドの引数に渡せる
以下のようにしてヒアドキュメントをメソッドの引数にそのまま渡せます。
def here_method(arg1, arg2, arg3) puts arg1 puts arg2 puts arg3 end here_method("hoge", <<EOS, "fuga") foo bar baz EOS # => hoge foo bar baz fuga
複数のヒアドキュメントを引数として渡すことも可能だったりします。
こうなるともう何がなんだか・・・。
here_method("arg1", <<EOS1, <<EOS2) foo bar baz EOS1 HOGE FUGA EOS2 # => arg1 foo bar baz HOGE FUGA
メソッドのレシーバになれる
ヒアドキュメントをレシーバにしてメソッドを呼び出せます。
puts <<LABEL.upcase The quick brown fox jumps over the lazy dog. LABEL # => THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG.
バックスラッシュでのコマンド実行
開始ラベルをバックスラッシュで囲む事でヒアドキュメントをコマンドとして実行できたりします。
1 行に 1 コマンドずつ書くと複数コマンドを実行できます。
print <<`EOC` date ls -la whoami pwd EOC
特にメソッドの引数に指定する書き方は見慣れない事もあって、初めて見たときはびっくりしました。
使い慣れているつもりの言語でも調べてみると知らない機能いっぱいありますね。
まだまだ勉強不足でした。
参考
ヒアドキュメント (行指向文字列リテラル)
http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fliteral.html#here