Юлия Непоследовательная проверка границ на ломтики - PullRequest
3 голосов
/ 07 января 2020

Я писал код, который использует представления и фрагменты массива, но обнаружил некоторые несоответствия.

Почему следующее не вызывает исключение:

a = [1,2]
@show a[3:end]
@show a[4:end]

Вышеприведенное возвращает пустые массивы, как и ожидалось

Но это вызывает BoundsError

a = [1,2]
@show a[2:3]

Почему первый индекс среза может быть больше, чем размер самого массива, но Джулия, кажется, есть проблема с последним индексом, который больше, чем размер?

Джулия версия: 1.3.1

1 Ответ

4 голосов
/ 07 января 2020

x[c:end] является синтаксисом для getindex(x, UnitRange(c, lastindex(x))).

Любой диапазон a:b с a > b пуст. Индексирование массива с пустым диапазоном приведет к созданию пустого массива по определению getindex.

Вы индексируете массив с пустым диапазоном в первом наборе примеров. Во втором наборе примеров вы индексируете за пределами диапазона, что приводит к ошибкам, как и ожидалось.

...