Array#slice
的文件说:
[A]当元素范围的起始索引位于数组的末尾时,返回空数组。
如果索引(或起始索引)超出范围,则返回nil。
考虑到这一点,
a = ["a","b","c","d","e"]
a[6,1] # => nil
a[5,1] # => []
a[5..10] # => []
为什么a[5,1]
和a[5..10]
会返回一个空数组,因为5
不是数组的末尾?它应该超出索引,因此它应该返回nil
。
答案 0 :(得分:2)
你的困惑源于缺乏一个索引的定义,并且在该范围的末尾#34;。对于任何数组arr
,当i
等于i
时,索引arr.size
位于范围的末尾,也就是说,当索引等于最后一个元素的索引加上时之一。
对于a[5,1] #=> []
,5
,起始索引是"在范围的末尾",自a.size #=> 5
起。因此,通过doc,无论第二个参数的值如何(这更好地描述为" size"而不是" index"),它应该返回一个空数组。例如,
a[5,1] #=> []
a[5, 1_000_000] #=> []
a[6,1] #=> nil
对于a[5..10]
,我们会得到相同的结果。