(Начинающая Джулия) Basi c, а l oop не работает в Juno, но работает в Jupyter - PullRequest
1 голос
/ 26 мая 2020
• 1000 запустите его в REPL или как файл .jl.
n = 0
while n < 4
    n += 1
    println(n)
end

Когда я запускаю его как .jl, сообщение об ошибке гласит:

Error evaluating firsttest.jl

LoadError: UndefVarError: n not defined
in expression starting at C:\Users\Lipkin Hollow\JuliaPro-1.4.1-1\firsttest.jl:2
top-level scope at firsttest.jl:3

Когда я запускаю его в REPL , ошибка гласит:

ERROR: UndefVarError: n not defined
Stacktrace:
 [1] top-level scope at .\none:3

Любая помощь будет принята с благодарностью!

1 Ответ

2 голосов
/ 26 мая 2020

Вы столкнулись с текущими правилами области видимости в Julia: циклы вводят свою собственную область видимости, поэтому вы не можете получить доступ к глобальной переменной из l oop. Соответствующая документация: здесь

IJulia в настоящее время использует пакет под названием SoftGlobalScope.jl , чтобы изменить это поведение области видимости, поскольку это оказалось одним из наиболее спорных изменений. введена в Julia версии 1.0. Вот почему в настоящее время поведение блокнотов IJulia / Jupyter отличается от других настроек (например, REPL и Juno).

Обратите внимание, что это поведение снова изменится в Julia версии 1.5, что приведет к тому, что поведение REPL будет соответствовать то, что вы сейчас видите в Jupyter. Объявление об этом можно найти здесь .

В общем, использование глобальных переменных в Julia настоятельно не рекомендуется из соображений производительности, и вам следует постараться организовать свой код в виде функций, чтобы максимально использовать возможности Julia!

...