トップ «前の日記(2011-04-02) 最新 次の日記(2011-04-16)» 編集

2011-04-08 [長年日記]

_ RubyのHash式の { } は省略もできるけど完全に同一ではない

まぁ当たり前の話なんですけど。

Ruby の Hash は

{
  key1 => val1,
  key2 => val2,
  ...
}

と書くのだけれど、メソッドの最後の引数にする場合にはこの { } を省略することができる。つまり

method( { key1 => val1, key2 => val2 } )

これを

method( key1 => val1, key2 => val2 )

のように書けるということ。実際には ( ) も省略できるので

method key1 => val1, key2 => val2

こうでもよい。これがよく Rails で使われている記法で、メソッド呼び出しのように見えず、何かの宣言を書いているように見える。これだけでも今までのプログラムの書き方と違う感じがする*1

しかしこの { } の省略をすると末尾の , を余計に付けることができない。当たり前といえば当たり前なんだけど、

method key1 => val1,
       key2 => val2,

と書いてしまうと val2 で値が終わったことが分からずに syntax error になってしまう。

{ } をちゃんと書いているときについ末尾の , を残す書き方をしているとハマる。Hash定義が何行にも渡るものを書いていて、かつまだ変更の可能性があるときに , を付けて書くクセがあったのでハマってしまった。

Tags: Ruby

*1 個人的にはあまりこの書き方ばかり押すのは好きじゃないんだけど

本日のツッコミ(全2件) [ツッコミを入れる]
_ mitukiii (2011-04-18 00:02)

JavaScriptだとObjectの末尾に,があるとIEでエラーになるので大体ハッシュは末尾の,付けないようにしてます。

_ wtnabe (2011-04-18 12:03)

原則的には付けない方がいいと思ってます。でも PHP と Ruby を書いてるときは残すことがそれなりにありますね。変更の匂いがプンプンする場合に diff を見やすくする目的があります。