可能重复:
Array slicing in Ruby: looking for explanation for illogical behaviour (taken from Rubykoans.com)
我一直在玩ruby中的数组切片,但我不明白下面的最后2个结果:
a = [1,2,3]
a[2,1] # output is [3]
a[3,1] # output is [] ...why??
a[4,1] # output is nil ...according to the docs this makes sense
为什么a[3,1]
为空数组而a[4,1]
为零?
如果有的话,我希望a[3,1]
也能返回nil。根据{{3}},如果起始索引超出范围,则数组拆分应返回nil。那么为什么a[3,1]
没有返回nil?
注意:这是在ruby 1.9.2
上答案 0 :(得分:4)
你要求数组结束,[]
。以这种方式看待:数组[1,2,3]
可以被认为是由增量单元格构建的:(1, (2, (3, ()))
或1:2:3:[]
。第三个索引(第4项)显然是[]
。
答案 1 :(得分:1)
“如果索引(或起始索引)超出范围,则返回nil。”
根据同一链接中的示例, a[3,1]
是一种特殊情况。
顺便提一下,可以看到更多信息:Array slicing in Ruby: looking for explanation for illogical behaviour (taken from Rubykoans.com)
答案 2 :(得分:0)
如果您想象分配的左侧侧的切片,则更容易理解为什么。
>> (b = a.clone)[2,1] = :a; p b
[1, 2, :a]
>> (b = a.clone)[2,0] = :b; p b
[1, 2, :b, 3]
>> (b = a.clone)[3,1] = :c; p b
[1, 2, 3, :c]
>> (b = a.clone)[3,0] = :d; p b
[1, 2, 3, :d]