Ruby中是否存在某种看不见的数组终止?
我正在编写一个方法,该方法获取可变长度的数组,并将其压缩并转换为匹配的数组长度 该方法接受从50到126的任意数组长度。。并在调用时根据参数向下转换它们。这意味着我正在动态访问在方法调用时指定的范围。这也意味着我将访问不存在的数组索引。除此之外,我访问的范围可能相等。这就是我的问题所在:与任何其他不存在的索引相反,当使用范围访问数组时,数组的终止口袋的行为似乎很奇怪Ruby中是否存在某种看不见的数组终止?,ruby,arrays,Ruby,Arrays,我正在编写一个方法,该方法获取可变长度的数组,并将其压缩并转换为匹配的数组长度 该方法接受从50到126的任意数组长度。。并在调用时根据参数向下转换它们。这意味着我正在动态访问在方法调用时指定的范围。这也意味着我将访问不存在的数组索引。除此之外,我访问的范围可能相等。这就是我的问题所在:与任何其他不存在的索引相反,当使用范围访问数组时,数组的终止口袋的行为似乎很奇怪 >> a = [0, 1, 2, 3, 4] # => [0, 1, 2, 3, 4] >>
>> 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
>a=[0,1,2,3,4]
# => [0, 1, 2, 3, 4]
>>a[5]
#=>零
>>a[4..4]
# => [4]
>>a[6..6]
#=>零
>>a[5..5]
#=>[]>a[5..7]
#=>[]>a[6..7]
#=>nil似乎很奇怪,但这是一种记录在案的行为:
超出范围选择是一种特殊情况,其工作原理如下:
虽然我同意这并不十分明显。这是一种功能。只有在获取数组的子集时才会发生,数组的第一个端点等于长度
它允许您执行以下操作:
a = [1,2,3]
a[3..3] = [4,5] # a = [1,2,3,4,5]
编辑:实际上,你可以在任何范围内进行编辑。我的错。马特先生赢了一分钟,但我把两个答案都投了赞成票。谢谢,伙计们,您可以,但我仍然认为您已经了解了一些内容,因为如果[3..3]在您的情况下返回nil,您将无法以这种方式添加到数组的末尾。如果添加到末尾,而不是添加到包括末尾在内的任何位置,我更喜欢a=a+[4,5]或a