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