我正在研究Ruby Koans中的about_arrays.rb文件,我注意到这段代码,我不确定为什么答案是这样的:
def test_slicing_arrays
array = [:peanut, :butter, :and, :jelly]
assert_equal [], array[4,0]
assert_equal [], array[4,100]
assert_equal nil, array[5,0]
end
根据Ruby Koans的输出,有人可以向我解释为什么array[4,0]
会评估为[]
而array[5,0]
评估为nil?
。为什么array[5,0]
也不会评估为[]
?
出于好奇,我尝试了array[6,0]
,array[7,0]
,等等,也没有了。 Ruby有没有什么特别的东西可以为下一个数组索引添加一些东西呢?
编辑:
我找到了“Array slicing in Ruby: looking for explanation for illogical behaviour (taken from Rubykoans.com)”,它提出了同样的问题,但我仍然不理解索引在数组切片中是如何工作的。
答案 0 :(得分:6)
s [n,0]定义一个角色之前或之后的地方,和 经常在一个又一个之前。
切片的第一个参数是下限。当它是4
时,它仍然是数组的一部分,只是指向最后。当下限超出数组的长度时,它总是nil
。
最好考虑元素值之间空格的偏移量。