我试着看看是如何Array#[]=工作的,然后玩了一下:
enum[int] = obj → obj
enum[start, length] = obj → obj
enum[range] = obj → obj
问题 1
我有一个数组b保存nil在它的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]