Путаница с результатом использования метода ruby ​​Array [], когда индекс запуска больше - PullRequest
4 голосов
/ 11 августа 2011

Учитывая

array = [:a,:b,:c,:d] # with 4 elements:

array[3] => :d  # zero-based indices, I get that
array[4] => nil
array[5] => nil

array[3,0] => [] # OK since I asked for a slice with zero elements

Doco для массива [start, length] говорит, что он "Возвращает nil, если индекс (или начальный индекс) выходит за пределы диапазона."

array[5,0] => nil # OK
array[4,0] => []  # Hunh??

Как come array[4,0] возвращает массив в отличие от nil?

[править] Похоже, что это уже произошло: см. Разрезание массива в Ruby: ищите объяснение дляНелогичное поведение (взято с Rubykoans.com)

Для меня это объяснение выглядит как махание рукой, но я соглашусь на это и просто признаю, что рубин нарушает PLS.

1 Ответ

1 голос
/ 11 августа 2011

Я считаю, что в документации неправильно указано поведение.Но интуитивно, поведение имеет смысл.Точно так же, как можно определить 0-элементную «ленту» в начале массива, перед всеми элементами с помощью индексации array[0,0], также должно быть возможно, симметрично, получить «0-элементную» ленту в концемассива, после всех элементов, путем индексации array[array.size,0].Другим примером может быть то, что интуитивно всегда должно быть возможно получить копию массива путем индексации по всему его диапазону, то есть array[0,array.size];но это было бы невозможно для пустых массивов, если мы вернули nil, когда начальный индекс равен размеру массива.

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