Как ruby ​​обрабатывает доступ к массиву? - PullRequest
16 голосов
/ 16 октября 2010
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 Ответ

27 голосов
/ 16 октября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...