Ruby数组切片的特例

时间:2017-10-04 18:59:37

标签: arrays ruby

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

1 个答案:

答案 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],我们会得到相同的结果。