Это известный уродливый странный угол. Посмотрите на примеры в 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
. Это задокументировано, хотя я не уверен в причине этого.