Как обращаться к массиву рубиновых ручек? ruby-1.8.7-p174 > [0,1][2..3] => [] ruby-1.8.7-p174 > [0,1][3..4] => nil В настройке 0-индекса, где индексы 2, 3 и 4 на самом деле находятся вне границ массива из 2 элементов, почему они возвращают разные значения? Ответ 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. Это задокументировано, хотя я не уверен в причине этого.
Ответ 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. Это задокументировано, хотя я не уверен в причине этого.