For loop Julia中变量的作用域
当我运行下面的Julia代码时,出现了一个错误:For loop Julia中变量的作用域,for-loop,scope,julia,For Loop,Scope,Julia,当我运行下面的Julia代码时,出现了一个错误:UndevarError:globalValue未定义 我认为globalValue是一个全局变量,但它不是。因此,如果我在for循环中添加命令“globalglobalvalue”,我的代码就可以工作了。那么,有人能看一下吗?告诉我发生了什么事?提前谢谢 globalValue = 1.0; tempValue = 0.1; for ii = 1:10 # global globalValue; if I add this comma
UndevarError:globalValue未定义
我认为globalValue是一个全局变量,但它不是。因此,如果我在for循环中添加命令“globalglobalvalue”,我的代码就可以工作了。那么,有人能看一下吗?告诉我发生了什么事?提前谢谢
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
globalValue=1.0;
tempValue=0.1;
对于ii=1:10
#全球价值;如果我添加此命令,我的代码将正常工作
tempValue=5.0;##我有一个更新“tempValue”的函数
如果全局值<临时值
全局值=临时值;
结束
结束
您似乎在Julia>=0.7上,范围规则已更改
长话短说,在局部范围内,例如for循环,全局变量只为读取而继承,不为写入而继承。有两种解决方法:
- 在作业前放一个明确的
(你自己算出的)global
- 将所有内容包装在“全局-局部范围”中,如
block(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
let
全局值=1.0;
tempValue=0.1;
对于ii=1:10
tempValue=5.0;##我有一个更新“tempValue”的函数
如果全局值<临时值
全局值=临时值;
结束
结束
结束
您可以在此处找到更多信息:
- (特别是《朱莉娅》的作者之一斯特凡的文章
感谢您关注这个问题和您的解释。是的,事实上,我正在使用Julia 1.0,因为变量的作用域规则已经改变。我不知道这一点。但是,似乎第二个选项目前不起作用。也许,我会详细查看参考资料,看看发生了什么。非常感谢您的帮助您的帮助!再次查看,现在它工作了。结果表明,全局变量的名称是
globalValue
,而您尝试在循环中更新globalOptiValue
。您也可以在问题中更改此项。是的,的确,这是我的输入错误。现在它工作正常。非常感谢您的帮助!很高兴我能提供帮助。许多人将被重定向到这里,所以我想添加我的发现。你可以在一个全局定义的循环中写入一个变量,然后会创建一个单独的本地版本。如果你试图在同一个循环中读写一个全局变量,例如I=I+1
,Julia只会抱怨。这是因为Julia不知道你想要的是全局版本还是本地版本由于这个原因,println(globalValue)<代码> >代码> GualalValue= 2 可以在一个循环中单独地声明,但不在一起。当我为自己测试范围时,这些微妙之处令人迷惑。Hi @ NHVT,我看到您对StActObjt非常新。一般来说,如果答案已经解决了您的问题,请通过单击复选标记来考虑。更广泛的社区,你已经找到了解决方案,并给你的回答者和你自己带来了一些名声。当然,没有义务这样做。你也可以考虑接受你的其他问题的答案。嗨,CRSTNBR,谢谢你的信息。我一定会从现在起做!