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

ruby如何处理数组范围访问?,ruby,arrays,range,Ruby,Arrays,Range,在0索引设置中,索引2、3和4实际上都超出了2项数组的范围,为什么它们会返回不同的值 这是一个众所周知的丑陋奇怪的角落。请看一下rdoc中的示例 这一具体问题被列为“特例” 如果起始位置正好是数组末尾之外的一个项目,则它将返回一个空数组[]。如果起始值超出该值,nil。这是有记录的,尽管我不确定原因。你的问题没有那么多噪音,但不幸的是:可能是重复的。在这两种情况下,令人惊讶的是相同的:末指数为零对[],哇,重复下降了。为什么?好问题。我举起旗帜要求重新评估或解释。我很想了解这种情况的原因。请参阅

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

这是一个众所周知的丑陋奇怪的角落。请看一下rdoc中的示例

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


如果起始位置正好是数组末尾之外的一个项目,则它将返回一个空数组
[]
。如果起始值超出该值,
nil
。这是有记录的,尽管我不确定原因。

你的问题没有那么多噪音,但不幸的是:可能是重复的。在这两种情况下,令人惊讶的是相同的:末指数为零对[],哇,重复下降了。为什么?好问题。我举起旗帜要求重新评估或解释。我很想了解这种情况的原因。请参阅和相关评论,其中以“围栏张贴”和“索引”来描述差异。我同意西罗的观点,这个问题是重复的。对于阅读本问答的读者,请注意,该副本中有更多关于“为什么”的详细信息。
ruby-1.8.7-p174 > [0,1][2..3]
 => [] 
ruby-1.8.7-p174 > [0,1][3..4]
 => nil
   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]               #=> []