ruby如何处理数组范围访问?

ruby-1.8.7-p174 > [0,1][2..3] => [] ruby-1.8.7-p174 > [0,1][3..4] => nil 

在0索引设置中,索引2,3和4实际上都超出了2项数组的范围,为什么它们会返回不同的值?

这是一个众所周知的丑陋角落。 看一下array #slice的 rdoc示例。

这个具体问题被列为“特例”

  a = [ "a", "b", "c", "d", "e" ] a[2] + a[0] + a[1] #=> "cab" a[6] #=> nil a[1, 2] #=> [ "b", "c" ] a[1..3] #=> [ "b", "c", "d" ] a[4..7] #=> [ "e" ] a[6..10] #=> nil a[-3, 3] #=> [ "c", "d", "e" ] # special cases a[5] #=> nil a[5, 1] #=> [] a[5..10] #=> [] 

如果开始只是数组末尾之外的一个项目,那么它将返回[] ,一个空数组。 如果开始超出该范围,则nil 。 它已被记录,但我不确定它的原因。