Ruby 1.9.3p125 Array#slice奇怪的行为

时间:2012-03-29 15:26:26

标签: ruby-on-rails ruby

  

可能重复:
  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的原因是什么?

2 个答案:

答案 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],并且 可以分配。

最好将数组索引视为标识元素之间的空间,而不是元素本身。

这种解释创建了一个一致且有用的接口......例如,可以编写代码来处理替换元素或附加到零长度或填充的数组,而且不需要特殊情况测试。