当我在下面运行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
答案 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关键字声明修改意图 全局变量。