Если у меня есть массив a
:
a[a.length]
возвраты nil
. Хороший.a[a.length, x]
возвраты []
. Хороший.a[a.length+x, y]
возвраты nil
. Несовместимый 2.В то время как это поведение документируется, это кажется нечетным.
Кто-либо может объяснить причины позади этого дизайна?
Рассмотрим это
a = [0, 1, 2, 3] #=> [0, 1, 2, 3]
a[0, 10] #=> [0, 1, 2, 3]
a[1, 10] #=> [1, 2, 3]
a[2, 10] #=> [2, 3]
a[3, 10] #=> [3]
a[4, 10] #=> []
a[5, 10] #=> nil
Итак a [4, 10]
- это срез между 3
и концом массива, который равен []
Где как a [4]
и a [5, 10]
обращаются к элементам, которых нет в массиве
Это может помочь думать о точках среза как о находящихся между элементами, а не о сами элементы.