コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

RubyのHash代入記述のパターンまとめ

JSONをそのままRubyのコードに貼ってrspecのダミーデータを作ろう!とかやると あれ、ここ文字列じゃなくシンボルになってるじゃん… みたいな意趣違いをよく起こすのでメモ。

環境

$ ruby -v
ruby 2.5.0p0 

ケース別サンプル

キーを文字列にしたい

ポピュラーなやり方は1種類

hash = { "key" => "value" }
# => {"key"=>"value"}

キーをシンボルにしたい

基本はこっちになる。

hash = { :key =>  "value" }
# => {:key=>"value"}
hash = { key: "value" }
# => {:key=>"value"}
hash = { "key": "value" }
# => {:key=>"value"}

一番最後が文字列がキーになると勘違いしがち

紛らわしい例

変数を使った場合

var = "key"
# => "key"
hash = { var => "value"}
#=> {"key"=>"value"}
hash = { "#{var}": "value"}
#=> {:key=>"value"}

なお当たり前だけど、こう書くとぜんぜん違う意図になる

hash = { var: "value" }
#=> {:var=>"value"}