Ruby_Array_30

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

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

インスタンスメソッド

insert(nth, *val) -> self
  • インデックスnthの要素の直前(nthが負の場合は直後)に第2引数以降の値を挿入する
    • 引数valを一つも指定しなければ何もしない
  • nthに整数以外のオブジェクトを指定した場合はto_int メソッドによる暗黙の型変換を試みる
irb(main):001:0> arr = [1, 2, 3]
=> [1, 2, 3]

irb(main):002:0> arr.insert(1, 'a', 'b')
=> [1, "a", "b", 2, 3]

irb(main):003:0> arr
=> [1, "a", "b", 2, 3]
irb(main):001:0> arr = [1, 2, 3]
=> [1, 2, 3]

irb(main):002:0> arr.insert(10, 'a', 'b')
=> [1, 2, 3, nil, nil, nil, nil, nil, nil, nil, "a", "b"]

irb(main):003:0> arr
=> [1, 2, 3, nil, nil, nil, nil, nil, nil, nil, "a", "b"]

# memo
# ドキュメントには書いていないが、レシーバーの要素数よりも大きな値を指定すると間はnilで埋められるようだ
irb(main):001:0> arr = [1, 2, 3]
=> [1, 2, 3]

irb(main):002:0> arr.insert(1)
=> [1, 2, 3]

irb(main):003:0> arr
=> [1, 2, 3
irb(main):001:0> arr = [1, 2, 3]
=> [1, 2, 3]

irb(main):002:0> arr.insert(-2, 'A', 'B')
=> [1, 2, "A", "B", 3]

irb(main):003:0> arr
=> [1, 2, "A", "B", 3]
irb(main):001:0> arr = [1, 2, 3]
=> [1, 2, 3]

irb(main):002:0> arr.insert(1.0, 'A', 'B')
=> [1, "A", "B", 2, 3]

irb(main):003:0> arr.insert('1', 'A', 'B')
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):3:in `<main>'
        1: from (irb):3:in `insert'
TypeError (no implicit conversion of String into Integer)