我正在编写一个方法,它采用可变长度的数组并压缩并将它们转换为匹配的数组长度。
该方法接受的数组长度为50到126。 ..并在调用时根据参数将它们转换下来。这意味着我正在动态访问方法调用中指定的范围。这也意味着我将访问不存在的数组的索引。除此之外,我访问的范围可能相同。这就是我的问题所在:看起来数组的终止口袋在使用范围访问时表现得很奇怪,而不是任何其他不存在的索引
>> a = [0, 1, 2, 3, 4]
# => [0, 1, 2, 3, 4]
>> a[5]
# => nil
>> a[4..4]
# => [4]
>> a[6..6]
# => nil
>> a[5..5]
# => [] <------GGRAAAAAhhh!!! Thought you were nil
>> a[5..7]
# => [] <-------you too
>> a[6..7]
# => nil <-----but you are behaving
有谁知道为什么会这样?它是针对我的代码的空数组的额外测试,但是我整天在我的rails应用程序中追逐这个错误后更加好奇。 FWIW我在Mac OS X上运行Ruby 1.8.6,补丁级别114
答案 0 :(得分:3)
似乎很奇怪,但这是一个记录在案的行为: http://www.ruby-doc.org/core/classes/Array.html#M002183
答案 1 :(得分:2)
答案 2 :(得分:0)
这是Ruby Arrays的一个特征。只有在您获取数组的子集时才会发生,第一个端点等于长度。
它允许你做这样的事情:
a = [1,2,3]
a[3..3] = [4,5] # a = [1,2,3,4,5]
击> <击> 撞击>
编辑:实际上,你可以在任何范围内做到这一点。我的坏。