Джулия - проблема @code_warntype с ProgressMeter - PullRequest
1 голос
/ 03 июня 2019

Использование этого для цикла с using ProgressMeter:

function test()
       @showprogress 1 "Computing..." for n in 3:5:20
           print()
       end
 end

Я не понимаю, почему @code_warntype test() возвращает в трех строках предупреждение о типе и самое главное, как это исправить:

 %18 = φ (#2 => %12, #3 => %14)::Union{Nothing, Tuple{Int64,Int64}}

1 Ответ

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

Вот как for -циклы работают внутренне в Юлии, здесь вам не о чем беспокоиться или исправлять, см. https://docs.julialang.org/en/v1/manual/interfaces/#man-interface-iteration-1.

В частности, вызов for -loops iterateдля объекта, который вы перебираете, и возвращаете nothing, если итератор выполнен, или кортеж с loopvariable, state.Для этого конкретного случая iterate из StepRange{Int,Int} вы, таким образом, получаете Union{Nothing, Tuple{Int,Int}} от iterate звонка:

julia> @code_warntype iterate(3:5:20)
Body::Union{Nothing, Tuple{Int64,Int64}}
[...]
...