Почему это происходит?
Так вот в чем проблема, когда вы звоните a[3]
, вы на самом деле звоните getindex(a, 3)
с подписью getindex(::AbstractArray, ::Integer)
. Ваш второй пример отправлен в другую функцию, однако - getindex(::AbstractArray, ::UnitRange)
. Поведение этих двух функций отличается - хотя они обе дают то, что я ожидал увидеть.
Для контраста, списки python и массивы numpy ведут себя одинаково, но для numpy это работает проще, поскольку numpy не обеспечивает равное количество измерений для широковещания.
Что вы можете сделать?
Первая идея: условное ветвление с использованием length
a = # ...
return length(a) == 1 ? func(a[1]) : func(a)
Обратите внимание, что вы можете использовать only(a)
вместо a[1]
, если вы хотя бы на Julia 1.3.
Вторая идея: если вы программно индексируете вектор, вы можете проверить, равны ли эти два индекса
i = # ... the first index
j = # ... the second index
return i == j ? func(a[i]) : func(a[i:j])