2016-01-24 4 views
1

Для четырехэлементного массива [4] возвращает nil, но [4, 0] возвращает пустой массив.Ruby slicing not nil

array = [:peanut, :butter, :and, :jelly] 
array[4] # => nil 
array[4, 0] # => [] 
array[5] # => nil 
array[5, 0] # => nil 

Почему бы [4, 0] не возвращать nil так же, как [5, 0]?

Ответ от массива нарезки в Ruby: ищем объяснения нелогичного поведения (взято из Rubykoans.com) => Graphical Explination of WHats Happening

ответ

3

Это особый случай. Из official docs (курсив мой):

Для начала и диапазона случаев начальный индекс просто перед элементом. Кроме того, пустой массив возвращается, когда начальный индекс для диапазона элементов находится в конце массива.

a = [ "a", "b", "c", "d", "e" ] 
# ... 
# special cases 
a[5]     #=> nil 
a[6, 1]    #=> nil 
a[5, 1]    #=> []