はじめに
user.try(:[],:name)
初めてこのコードを見た時、
「なんで空の配列をメソッドの部分に入れているんだ、、、?」
と思いました。
Ruby(Rails)の文法をすっ飛ばしてきた弊害ですね、、、
##そもそもRailsのtryとは?
Active Supportに搭載されているメソッド (Rubyだけでは使えない)
対象のオブジェクトがnilでない時のみ、指定したメソッドを使う
第一引数に使いたいメソッド、第二引数にその引数(必要であれば)を与えます
user = {name: "test"}
# user[:group]がnilであるため、メソッドエラーが起きる
user[:group].replace("A")
# => NoMethodError: undefined method 'replace' for nil:NilClass
# nilな対象に対してtryを使うとエラーは起きず、nilが帰ってくるだけ
user[:group].try(:replace,"A")
=> nil
空の配列がメソッドに?
それでは本題ですが、rubyのHashには[]のメソッドがあります。
引数にkey名を取ってそのvalueを返します。
user.[] :name
=> "test"
# これはuser[:name]と同じ
ちなみに、「+」などもメソッドとして使えます。
user[:name].+ 2
=> "test2"
今回の場合はtryとこのメソッドの組み合わせなので
user.try(:[],:name)
=> "test"
という結果が返ってきます。
まとめ
[]についてなかなかヒットしなかったので少し理解に苦しみました。
ruby/railsの文法を勉強し直します、、、