Julia中的变量范围

时间:2018-08-20 12:15:01

标签: for-loop scope julia

当我在下面运行Julia代码时,出现错误:UndefVarError: globalValue not defined

我认为globalValue是一个全局变量,但不是。因此,如果我在for循环中添加命令“ global globalValue”,则我的代码将起作用。那么,有人可以看看吗,让我知道发生了什么事?预先感谢!

globalValue = 1.0;
tempValue   = 0.1;
for ii = 1:10
    # global globalValue; if I add this command, my code will work
    tempValue = 5.0; ## I have a function to update "tempValue"
    if globalValue < tempValue
        globalValue = tempValue;
    end
end

1 个答案:

答案 0 :(得分:15)

似乎您在朱莉娅(Julia)> = 0.7上,范围规则已更改。

长话短说,在局部范围(例如for循环)中,全局变量仅继承用于读取,而不能继承用于写入。有两种解决方法:

  • 在作业前(您自己想出的内容)前放置一个明确的global
  • 将所有内容包装在let ... end块之类的“全局本地范围”中(globalValue不再是一个全局变量)

在您的情况下,第二个选项看起来像

let
globalValue = 1.0;
tempValue   = 0.1;
for ii = 1:10
    tempValue = 5.0;## I have a function to update "tempValue"
    if globalValue < tempValue
        globalValue = tempValue;
    end
end
end

您可以在此处找到更多信息:

尽管我自己觉得这很烦人,但是有充分的理由说明为什么进行了更改。另外,应尽量避免更改全局变量。让我在这里引用手册(请参见上面的链接):

  

许多人考虑避免更改全局变量的值   成为编程最佳实践。原因之一是   远程更改其他模块中全局变量的状态   应该小心,因为它会使程序出现局部行为   很难推理。这就是为什么范围块引入了   局部范围要求使用global关键字声明修改意图   全局变量。