Делает область Юлия 1.0.0 с for петля имеет смысла для начинающих?


В julia 1.0.0 я получаю следующее поведение области видимости для цикла:

julia> counts = 0
0
julia> for i in 1:10
       counts += 1
   end
ERROR: UndefVarError: counts not defined

Я нашел решение, чтобы сделать переменную counts global внутри цикла for.

julia> for i in 1:10
           global counts += 1
       end
julia> counts
10
Однако, как новичок в Джулии, это поведение почти заставило меня бросить язык, потому что он кажется таким отличным от других языков. Теперь, когда я вижу решение выше, мне интересно, интуитивно ли это для начинающих пользователей julia. Это не было интуитивным для меня, хотя я, наконец, смог решить его прошло совсем немного времени.

Вот что сбивает с толку. Я думал, что сделать переменную глобальной, когда она была инициализирована, решит проблему. Это не так:

julia> global c = 0
julia> for i in 1:10
           c += 1
       end
ERROR: UndefVarError: c not defined
Казалось бы, естественно, что глобальная область c выше будет стекать в цикл for, но первая инициализация c в цикле for, по-видимому, создает другой локальный цикл for c.

Имеет ли это смысл для опытных разработчиков julia?

1 7

1 ответ:

Я думаю, что есть согласие, что для интерактивного использования это поведение не является оптимальным, и оно, вероятно, скоро изменится на ожидаемое поведение в REPL, IJulia и т. д. Вы можете найти обсуждение здесь: https://github.com/JuliaLang/julia/issues/28789

Обратите внимание, однако, что все работает, как и ожидалось, как только вы обернете его в локальную область, такую как функция или блок let, например.

Смотрите мой ответ здесь: область переменных в Julia для дополнительная информация/ссылки.