Ruby 1.9 以降だと,キーがシンボルであるハッシュリテラルは
{foo: 3, bar: 4} #=> {:foo=>3, :bar=>4}
という書き方ができるよね。
ラベルに数字とかスペースとかどーよ?
でも,この記法は,〈識別子に使えない形式〉のラベルを認めていない。
{foo: 3, bar: 4, 3D: 5} #=> syntax error
アンダースコア _
以外の記号や数字などで始まっていたり,スペースを含むようなラベルは使えないんだよね。
じゃあ上の例で,3D
が入ってくることによって,全体を
{:foo=>3, :bar=>4, :"3D"=>5}
と書き替えなければならないかというと,そうでもなく,記法を混ぜることができるので,
{foo: 3, bar: 4, :"3D" => 5} #=> {:foo=>3, :bar=>4, :"3D"=>5}
のような書き方ができる。(気持ち悪いという人もいるだろうけどな)
Ruby 2.2 では
Ruby 2.2 で,ハッシュリテラルの記法が少し拡張された。
こんなふうに書けるゾ!
{foo: 3, bar: 4, "3D": 5}
つまり,ダブルクオートで囲ってさえやれば,コロン記法でいけるってこと。
漢字とか?
ちなみに,変数名やメソッド名などと同じく,ハッシュリテラルのラベルにも漢字とか仮名とかが使える。
{朝: 3, 暮: 4} #=> {:朝=>3, :暮=>4}