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

Mat*_*rey 16 ruby arrays range

ruby-1.8.7-p174 > [0,1][2..3]
 => [] 
ruby-1.8.7-p174 > [0,1][3..4]
 => nil
Run Code Online (Sandbox Code Playgroud)

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

Tel*_*hus 27

这是一个众所周知的丑陋角落.看一下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]               #=> []
Run Code Online (Sandbox Code Playgroud)

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