For loop Julia 1.0 UndevarError-变量范围
我正在从0.7升到1.0。Julia的变量范围规则似乎从0.7变为1.0。例如,我想运行一个简单的循环,如下所示:For loop Julia 1.0 UndevarError-变量范围,for-loop,scope,julia,scoping,For Loop,Scope,Julia,Scoping,我正在从0.7升到1.0。Julia的变量范围规则似乎从0.7变为1.0。例如,我想运行一个简单的循环,如下所示: num=0 对于i=1:5 如果i==3 num=num+1 终止 终止 打印(个) 在Julia 0.7(以及大多数其他语言)中,我们可以在循环之后使用num=1。但是,它将导致Julia 1.0中未定义的UndefVarError:num。我知道通过使用let我可以做到这一点 let num=0 对于i=1:5 如果i==3 num=num+1 终止 终止 打印(个) 终止
num=0
对于i=1:5
如果i==3
num=num+1
终止
终止
打印(个)
在Julia 0.7(以及大多数其他语言)中,我们可以在循环之后使用num=1
。但是,它将导致Julia 1.0中未定义的UndefVarError:num
。我知道通过使用let
我可以做到这一点
let
num=0
对于i=1:5
如果i==3
num=num+1
终止
终止
打印(个)
终止
它将打印出1。但是我确实想把num=1
放在循环和let
块之外。一些答案建议将所有代码放在let
块中,但在逐行测试时会产生其他问题,包括UndefVarError
。有没有办法代替使用let
阻塞?谢谢 对此进行了讨论
在num
变量的循环中添加global
,如下所示
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
编辑
对于Julia的新朋友来说,vasja在下面的回答中的精彩评论值得注意:
请记住,在函数中您不会使用全局,因为函数中的作用域规则与您预期的一样:
function testscope()
num = 0
for i = 1:5
if i == 3
num = num + 1
end
end
return num
end
julia> t = testscope()
1
请参阅该答案,以获得一个很好的示例,说明如何对同一代码使用函数而不存在范围问题。请记住,在函数中,您不会使用
全局
,因为函数中的范围规则与您预期的一样:
function testscope()
num = 0
for i = 1:5
if i == 3
num = num + 1
end
end
return num
end
julia> t = testscope()
1
意外行为仅在REPL中出现。
更多关于这方面的信息它很有效!谢谢我把全局变量放在num之前,但它不起作用。“看来朱莉娅的变量范围规则从0.7变为1.0”这句话是今年的轻描淡写@史蒂文:是的,你击中了我的头!如果是,OP不应该在对他的问题的评论中被引导到那里吗?好的评论。我自己也辩论过这个问题。然而,如果有人是一门语言的新手,有时对特定代码的准确答案可能比更一般的答案更容易理解。例如,你的链接有。这是我第一次真正在stackoverflow上做任何事情(除了几年前使用R语言)。谢谢PS:(我确实提供了一个链接,但没有提到重复。)哦,谢谢!这很有帮助,因为我确实在编写函数。在我完成整个函数之前,我必须通过逐行测试来保证这些中间步骤的工作,在这种情况下,我需要使用
global
,但是如果我在准备调用函数时不删除这些global
,就会产生语法错误。