fetchと[]の違いを、try hash で知りました。

  • 11
    Like
  • 0
    Comment
More than 1 year has passed since last update.
a = {name: 'taro'}

a.try(:[], :name)

という書き方を教わりました。

a.try(:fetch, :name)

でもいけます。けど。

pry(main)> a.try(:[], :email)
# => nil

pry(main)> a.try(:fetch, :email)
# KeyError: key not found: :email from /home/vagrant/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/activesupport-4.1.8/lib/active_support/core_ext/object/try.rb:45:in `fetch'

#となりますので、fetchの場合は、以下のようにします。

pry(main)> a.try(:fetch, :email, nil)
=> nil

そもそも、[]がメソッドということですので、

a[:name]
# => "taro"

a.[] :name
# => "taro"

という風にかけるんですね。それで、fetchと[]が、keyの有無でちょっとだけ挙動が変わるということでございますね。

とにかく、勉強になりました。ありがとうございます。