我要从朱莉娅0.7调到1.0。茱莉亚关于变量范围的规则似乎从0.7变到1.0。例如,我想运行这样一个简单的循环:
num = 0
for i = 1:5
if i == 3
num = num + 1
end
end
print(num)在Julia0.7(和大多数其他语言中)中,我们可以期待循环之后的num = 1。然而,它将招致朱莉娅1.0中的UndefVarError: num not defined。我知道通过使用let我可以做到这一点
let
num = 0
for i = 1:5
if i == 3
num = num + 1
end
end
print(num)
end它将打印出1,但我确实希望在循环和let块之外获得let。一些答案建议将所有代码放在一个let块中,但是在逐行测试时会引起其他问题,包括UndefVarError。有没有办法可以不使用let阻塞呢?谢谢!
发布于 2018-09-19 00:32:03
这是讨论这里。
在循环中为global变量添加num,如下所示。
num = 0
for i = 1:5
if i == 3
global num = num + 1
end
end
print(num)在Julia 1.0.0 REPL中运行:
julia> num = 0
0
julia> for i = 1:5
if i == 3
global num = num + 1
end
end
julia> print(num)
1编辑
对于来到朱莉娅这里的人来说,瓦斯卡在下面的回答中所作的极好的评论是值得注意的:
请记住,在一个函数中,您不会使用全局函数,因为函数中的范围规则与您预期的一样:
关于在没有作用域问题的情况下为相同代码使用函数的良好示例,请参见该答案。
发布于 2018-09-19 22:07:04
请记住,在一个函数中,您不会使用global,因为函数中的范围规则与您预期的一样:
function testscope()
num = 0
for i = 1:5
if i == 3
num = num + 1
end
end
return num
end
julia> t = testscope()
1意外行为只出现在REPL中。有关此这里的更多信息
https://stackoverflow.com/questions/52396269
复制相似问题