Ruby_Array_19
この記事は、以下のドキュメントを改変(自分なりに整理)して利用しています。
class Array (Ruby 3.0.0 リファレンスマニュアル)
インスタンスメソッド
dig(idx, ...) -> object | nil
irb(main):001:0> arr = [[1, [2, 3]]] => [[1, [2, 3]]] irb(main):002:0> arr.dig(0, 1, 1) => 3 irb(main):003:0> arr.dig(1, 2, 3, 4, 5) => nil
irb(main):001:0> arr = [[1, [2, 'a']]] => [[1, [2, "a"]]] irb(main):002:0> v = arr.dig(0, 1, 1) => "a" irb(main):003:0> v.capitalize! => "A" irb(main):004:0> arr => [[1, [2, "A"]]] # memo # "参照して返す"から、返されたものに破壊的な変更を加えると元の配列に影響がでるのか
irb(main):001:0> arr = [[1, [2, 3]]] => [[1, [2, 3]]] irb(main):002:0> arr.dig(0, 0, 0, 0, 0) Traceback (most recent call last): 5: from /Users/mfham/.rbenv/versions/3.0.0/bin/irb:23:in `<main>' 4: from /Users/mfham/.rbenv/versions/3.0.0/bin/irb:23:in `load' 3: from /Users/mfham/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/irb-1.3.0/exe/irb:11:in `<top (required)>' 2: from (irb):6:in `<main>' 1: from (irb):6:in `dig' TypeError (Integer does not have #dig method) # memo # 第一引数により1が、そして1(Integer)にdigメソッドはないのでエラー
irb(main):001:0> arr = [1, {foo: :bar}].dig(1, :foo) => :bar irb(main):002:0> arr = [1, {foo: :bar}].dig(1, :foo, 1) Traceback (most recent call last): 5: from /Users/mfham/.rbenv/versions/3.0.0/bin/irb:23:in `<main>' 4: from /Users/mfham/.rbenv/versions/3.0.0/bin/irb:23:in `load' 3: from /Users/mfham/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/irb-1.3.0/exe/irb:11:in `<top (required)>' 2: from (irb):2:in `<main>' 1: from (irb):2:in `dig' TypeError (Symbol does not have #dig method) # memo # Hashはdigメソッドがあるので:barを返せる # Symbolはdigメソッドがないのでエラー
メモ
- Arrayにもdigメソッドがある。Hashだけかと思ってた