【发布时间】:2013-02-24 07:48:57
【问题描述】:
我试着看看Array#[]= 是如何工作的,然后玩了一下:
enum[int] = obj → obj
enum[start, length] = obj → obj
enum[range] = obj → obj
问题 1
我有一个数组b 在其0 索引处保存nil。
b = []
b[0] # => nil
我尝试在下面的代码中将nil 替换为整数10。
b[-1] = 10 # => IndexError: index -1 too small for array; minimum: 0
为什么上面的代码不起作用,而下面的代码起作用?对于大小为1 的数组,为什么索引0 和-1 的处理方式不同?
b[0] = 5 # => 5
b[-1] = 10 # => 10
问题 2
我创建了一个大小为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]
【问题讨论】:
-
好问题,正在寻找原因
-
@Arindam 感谢您的补充.. :)
-
像
b = []这样的空数组不 持有nil。如果给定索引处的值不存在,它只会返回nil。> b[6789]=>nil -
@DavidUnric Humm 你完全正确。