Ruby の配列は色々と面白いことができます。
nums = [ 1, 2, 3, 4, 5 ]
nums[1, 3] → [ 2, 3, 4 ]
第一引数の要素から始まり、第二引数の数の長さをもつ offset の配列が取得できます。
つまり nums[2, 1] は nums[2] に等しいわけです。
nums[-3, 2] → [ 3, 4 ]
[ 3, 2 ] とならないことに注意です。
ちなみに、第二引数が負数の場合は nil が返ります。
長さじゃなくて範囲で取得もできます。
nums[1..3] → [ 1, 2, 3 ]
nums[1...3] → [ 1, 2 ]
nums[-3..-1] → [ 3, 4, 5 ]
取得はまだマシです。値の設定の方を見てみましょう。
nums[0] = 0 → [ 0, 2, 3, 4, 5 ]
nums[2, 2] = "a" → [ 1, 2, "a", 5 ]
nums[2, 0] = "b" → [ 1, 2, "b", 3, 4, 5 ]
nums[1, 1] = [ "a", "b", "c" ] → [ 1, "a", "b", "c", 2, 3, 4, 5 ]
nums[0..2] = [] → [ 4, 5 ]
nums[7..8] = 98, 99 → [ 1, 2, 3, 4, 5, nil, nil, 98, 99 ]
や、ややこしい・・・覚えるしかない