railsがんばる子

Ruby on Railsがんばる子です。胡蝶蘭のECサイトを運営しています。

hashに対してtryする(hash#fetch、nil#try)

hashから要素を取り出すとき、nilだとエラーとなります。

[1] pry(main)> {}[:nanika]
=> nil
[2] pry(main)> nil[:nanika]
NoMethodError: undefined method `[]' for nil:NilClass

そこでtryの登場ですが、hash#fetchは登録キーがないとエラーがはみ出てきます。

[3] pry(main)> {}.try(:fetch, :nanika)
KeyError: key not found: :nanika
[4] pry(main)> {nanika: 1}.try(:fetch, :nanika)
=> 1

hash#fetchにはdefaultを渡してあげるとKeyErrorが防げます。

これで、nilに対しても、keyがないときでもエラーが起きません。

[5] pry(main)> {nanika: 1}.try(:fetch, :nanika, 0)
=> 1
[6] pry(main)> {}.try(:fetch, :nanika, 0)
=> 0
[7] pry(main)> nil.try(:fetch, :nanika, 0)
=> nil