私はどのようにArray#[]=動作するかを確認しようとしました:
enum[int] = obj → obj
enum[start, length] = obj → obj
enum[range] = obj → obj
質問1
bインデックスを保持nilする配列が 1 つあり0ます。
b = []
b[0] # => nil
以下のコードnilで整数に置き換えようとしました。10
b[-1] = 10 # => IndexError: index -1 too small for array; minimum: 0
上記のコードは機能しないのに、以下のコードは機能するのはなぜですか? size の配列の場合1、インデックス0との-1扱いが異なるのはなぜですか?
b[0] = 5 # => 5
b[-1] = 10 # => 10
質問2
size の配列を作成2し、次のことを行いました。
a = [1,2]
a[-3] = 3 # => IndexError: index -3 too small for array; minimum: -2
a[-3] = [3] # => IndexError: index -3 too small for array; minimum: -2
a[-3..-4] = [3] # => RangeError: -3..-4 out of range
負のインデックスが配列のサイズを大きくすることはないと思いますが、その理由はわかりません。以下のコードが成功したのはなぜですか?
a[-2..-3] = [3,4] #=> [3, 4]