知ってそうで知らないシリーズメモ
環境
$ ruby -v ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin17]
例
2次元以上のHashから値を取ろうとした場合、1つ目のキー指定時に対象のものがないと2つ目以降が取れない。
# サンプル配列 hash = {a: {b: "val"}} #=> {:a=>{:b=>"val"}} # 1個目の値が存在するものなら問題なくとれる hash[:a][:b] #=> "val" # 1個目の値がないと nil に対して処理をするのでエラー hash[:x][:b] #NoMethodError: undefined method `[]' for nil:NilClass # from (irb):5 # from /usr/bin/irb:11:in `<main>'
こういう場合にdigを使うと存在しない場合はnilを結果に返してくれる
hash.dig(:a,:b) #=> "val" hash.dig(:x,:b) #=> nil
配列にも使える
ary = [[10,20],[30,40]] #=> [[10, 20], [30, 40]] ary.dig(0,0) #=> 10 # ありえない引数を指定する ary[10][0] #NoMethodError: undefined method `[]' for nil:NilClass # from (irb):11 # from /usr/bin/irb:11:in `<main>' ary.dig(10,0) #=> nil