我正在Ruby Koans中处理about_arrays.rb文件,发现这段代码,但不确定答案为什么是这样的:
def test_slicing_arrays
array = [:peanut, :butter, :and, :jelly]
assert_equal [], array[4,0]
assert_equal [], array[4,100]
assert_equal nil, array[5,0]
end
基于 Ruby Koans 的输出,能否有人解释一下为什么
array[4,0]
会被计算为[]
,而array[5,0]
被计算为nil
? 为什么 array[5,0]
不会也被计算为 []
?出于好奇心,我尝试了
array[6,0]
, array[7,0]
等等,都得到了nil
。Ruby 对于下一个需要添加到其中的数组索引有特殊的处理吗?
编辑:
我找到了 "Array slicing in Ruby: looking for explanation for illogical behaviour (taken from Rubykoans.com)",它问了同样的问题,但我仍然不理解数组切片中索引是如何工作的。
3,4
切片时,你得到的是该数组中的最后一个元素,所以你可以看到4
是一个有效的边界。因此,如果你从4
开始切片,你指向的是数组的末尾,从那里切片0
个元素将会得到一个空数组。可能有人比我更好地解释它。 :) - alexarray[4,0]=object
会在最后一个元素之后插入对象,array[3,0]=object
会在最后一个元素之前插入对象等等。非空切片将替换元素。 - David Unric