Ответ 1
Это известный уродливый нечетный угол. Взгляните на примеры в rdoc для Array # slice.
Эта конкретная проблема указана как "специальный случай"
a = [ "a", "b", "c", "d", "e" ]
a[2] + a[0] + a[1] #=> "cab"
a[6] #=> nil
a[1, 2] #=> [ "b", "c" ]
a[1..3] #=> [ "b", "c", "d" ]
a[4..7] #=> [ "e" ]
a[6..10] #=> nil
a[-3, 3] #=> [ "c", "d", "e" ]
# special cases
a[5] #=> nil
a[5, 1] #=> []
a[5..10] #=> []
Если начало - это точно один элемент за концом массива, тогда он вернет []
, пустой массив. Если старт выше этого, nil
. Это задокументировано, хотя я не уверен в причине этого.