1

我今天早上安装了 JuliaPro 1.4.1-1 并打开了一些 Julia 初学者教程。

下面的代码在 Jupyter Notebook 中完美运行,但是当我在 Juno 中运行它时,无论我在 REPL 中运行它还是作为 .jl 文件运行它都会给出 UndefVarError。

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

任何帮助,将不胜感激!

4

1 回答 1

2

您在 Julia 中遇到了当前的作用域规则:循环引入了它们自己的作用域,因此您无法从循环内访问全局变量。相关文档在这里

IJulia 目前使用一个名为SoftGlobalScope.jl的包来改变这种作用域行为,因为它被证明是 Julia 1.0 版中引入的更具争议性的改变之一。这就是 IJulia/Jupyter Notebooks 和其他设置(即 REPL 和 Juno)之间的行为当前不同的原因。

请注意,此行为将在 Julia 版本 1.5 中再次更改,这将使 REPL 中的行为与您现在在 Jupyter 中看到的一致。可以在此处找到有关此的公告。

不过,一般来说,出于性能原因,强烈建议不要在 Julia 中使用全局变量,您应该考虑在函数中组织代码以充分利用 Julia!

于 2020-05-26T15:55:19.460 回答