启动索引大于(array.size -1)时会产生关于ruby Array []方法的混淆

时间:2011-08-11 18:53:36

标签: ruby arrays null slice

给出

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。

1 个答案:

答案 0 :(得分:1)

我认为文档没有正确说出行为。但直观地说,行为是有道理的。就像可以在数组的开头定义一个0元素“sliver”,在所有元素之前通过索引array[0,0]来定义它,也应该可以对称地获得一个0元素的“条子”在所有元素之后,通过索引array[array.size,0],数组的结尾。另一个例子是,直觉上总是可以通过索引整个范围获得数组的副本,即array[0,array.size];但是如果我们在起始索引等于数组大小时返回nil,那么对于空数组这是不可能的。