给出
array = [:a,:b,:c,:d] # with 4 elements:
array[3] => :d # zero-based indices, I get that
array[4] => nil
array[5] => nil
array[3,0] => [] # OK since I asked for a slice with zero elements
Doco for array [start,length]表示“如果索引(或起始索引)超出范围,则返回nil。”
array[5,0] => nil # OK
array[4,0] => [] # Hunh??
come array[4,0]
如何返回数组而不是nil
?
[edit]看起来已经出现:请参阅Array slicing in Ruby: looking for explanation for illogical behaviour (taken from Rubykoans.com)
对我而言,解释看起来有点像挥手,但我会满足于此并且接受红宝石在这里违反PLS。
答案 0 :(得分:1)
我认为文档没有正确说出行为。但直观地说,行为是有道理的。就像可以在数组的开头定义一个0元素“sliver”,在所有元素之前通过索引array[0,0]
来定义它,也应该可以对称地获得一个0元素的“条子”在所有元素之后,通过索引array[array.size,0]
,数组的结尾。另一个例子是,直觉上总是可以通过索引整个范围获得数组的副本,即array[0,array.size]
;但是如果我们在起始索引等于数组大小时返回nil,那么对于空数组这是不可能的。