FM牛鍵屋本舗

プログラマ(弱)の日々精進系ブログ

メソッド引数ではハッシュのブレースを省略できるよ!!!

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[...] 形式のメソッ ド呼び出しと配列式では、要素全体がハッシュの場合に限り、 {, }を省略することができます。

余計な時間使っちゃった…