Ruby_Array_6

この記事は、以下のドキュメントを改変(自分なりに整理)して利用しています。

class Array (Ruby 3.0.0 リファレンスマニュアル)

インスタンスメソッド

self[nth] = val
  • nth番目の要素をvalに設定する
  • nthが配列の範囲を超える場合、配列の長さを自動的に拡張して拡張した領域をnilで初期化する
  • nthに整数以外のオブジェクトを指定した場合はto_intメソッドによる暗黙の型変換を試みる
  • nthに整数以外の(暗黙の型変換が行えない)オブジェクトを指定した場合はTypeError、自身の始点よりも前を指している場合はIndexError
irb(main):001:0> arr = ['a', 'b', 'c']
=> ["a", "b", "c"]

irb(main):002:0> arr[0] = 'z'
=> "z"

irb(main):003:0> arr[-1] = 'x'
=> "x"

irb(main):004:0> arr
=> ["z", "b", "x"]
irb(main):001:0> arr = ['a', 'b', 'c']
=> ["a", "b", "c"]

irb(main):002:0> arr[5] = 'z'
=> "z"

irb(main):003:0> arr
=> ["a", "b", "c", nil, nil, "z"]
irb(main):001:0> arr = ['a', 'b', 'c']
=> ["a", "b", "c"]

irb(main):002:0> arr[1.1] = 'z'
=> "z"

irb(main):003:0> arr
=> ["a", "z", "c"]

# memo
# 1.1.to_i #=> 1
irb(main):001:0> arr = ['a', 'b', 'c']
=> ["a", "b", "c"]

irb(main):002:0> arr['1.1'] = 'z'
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 `[]='
TypeError (no implicit conversion of String into Integer)
irb(main):001:0> arr = ['a', 'b', 'c']
=> ["a", "b", "c"]

irb(main):002:0> arr[-10] = 'z'
Traceback (most recent call last):
        4: from /Users/mfham/.rbenv/versions/3.0.0/bin/irb:23:in `<main>'
        3: from /Users/mfham/.rbenv/versions/3.0.0/bin/irb:23:in `load'
        2: 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)>'
        1: from (irb):2:in `<main>'
IndexError (index -10 too small for array; minimum: -3)

メモ

  • nth指定が配列の範囲を超える場合、始点よりも前の場合、の挙動は覚えておきたい