可能重复:
Array slicing in Ruby: looking for explanation for illogical behaviour (taken from Rubykoans.com)
假设你有一个数组
a = [1,2,3]
当a.slice(3,6)
返回[]
时,a.slice(4,6)
返回nil
的原因是什么?
答案 0 :(得分:4)
该文档列出了当起始索引等于数组长度时的特殊情况:
a = [ "a", "b", "c", "d", "e" ]
# special cases
a[5, 1] #=> []
a[5..10] #=> []
来自:http://www.ruby-doc.org/core-1.9.3/Array.html#method-i-slice
所以这似乎是内置功能,因为start索引是slice方法应该返回[]
的数组的长度,但是当你传递数组的长度时,你得到{ {1}}。这可能是由于Ruby如何定义数组中的范围。
答案 1 :(得分:2)
该机制以这种方式设计,因此切片可以在赋值运算符的左侧以高度通用的方式工作。
对于#slice
来说,这并不重要,因为无法分配该结果,但同样的解释适用于x[3, 6]
,并且 可以分配。
最好将数组索引视为标识元素之间的空间,而不是元素本身。
这种解释创建了一个一致且有用的接口......例如,可以编写代码来处理替换元素或附加到零长度或填充的数组,而且不需要特殊情况测试。