メソッド引数ではハッシュのブレースを省略できるよ!!!
Rakeのtask定義で本当に不思議だったこと
パーフェクトRubyの12章にRakeの説明が載っていて、つらつらと学んでいたんですが、ふとひっかかったことが。
task :hoge => :moge
書き方だけ見るとHashだなあ、と思ったんですが、{}
がない。これは一体どういうことだろうとirbで以下を打ってみても
irb(main):002:0* my_hash = :hoge => :moge
ファッキンエラー。
SyntaxError: (irb):2: syntax error, unexpected =>, expecting end-of-input my_hash = :hoge => :moge ^ from /usr/local/bin/irb:11:in `<main>'
シンボルに=>
メソッドが定義されているのだろうかと見てみても、ううんもしやRake独自?とドキュメントを漁ってみてもわからず。
もしやメソッド引数では上記の書き方が出来るのか?と試してみたら
def some_method(something) something[:hoge] end puts some_method :hoge => :moge # => moge
ビンゴーーーー
改めて本を読み返してみたら、キーワード引数においてブレース省略できるって書いてありました。
言語仕様(メソッド呼び出し)、言語仕様(ハッシュ式)にもちゃんと書いてありますね。
メソッドの引数の末尾に要素が1つ以上のハッシュを渡す場合は、{, }を省略することができます。ただし、obj[...] 形式のメソッ ド呼び出しと配列式では、要素全体がハッシュの場合に限り、 {, }を省略することができます。
余計な時間使っちゃった…