Понимание шага не может быть нулевой ошибкой в ​​языке Julia? - PullRequest
0 голосов
/ 05 июня 2019

Мне нужен вектор UnitRanges следующим образом: [2: 5, 3: 6, 4: 7, 5: 8]

, когда я пытаюсь запустить это (2: 5) :( 5: 8), я получаю сообщение об ошибке «ArgumentError: step не может быть нулевым.»

Есть ли способ создания массива UnitRange с использованием самого UnitRange?

1 Ответ

2 голосов
/ 05 июня 2019

Звучит так, как будто вы хотите отобразить или транслировать : по элементам в двух аргументах.Просто сделайте это явно:

julia> map(:, 2:5, 5:8)
4-element Array{UnitRange{Int64},1}:
 2:5
 3:6
 4:7
 5:8

Теперь, в идеале, вы бы также могли записать это как (2:5) .: (5:8) - вы бы поставили точку : для трансляции этого оператора - но так как :используется для очень многих вещей, и поскольку это не очень распространенный вариант использования, мы не включили расстановку точек :.Однако вы можете использовать неинфиксную форму и указать точку:

julia> (:).(2:5, 5:8)
4-element Array{UnitRange{Int64},1}:
 2:5
 3:6
 4:7
 5:8

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

julia> (5:8) - (2:5)
ERROR: ArgumentError: step cannot be zero

Не удается, потому что он пытается создать диапазон шагов, который эффективно 3:0:3 и имеет длину 4.

...