Julia 1.0 UndefVarError - 变量范围
Julia 1.0 UndefVarError - Scope of Variable
我正在从 Julia 0.7 升级到 1.0。似乎 Julia 对变量范围的规则从 0.7 变成了 1.0。例如,我想 运行 一个像这样的简单循环:
num = 0
for i = 1:5
if i == 3
num = num + 1
end
end
print(num)
在 Julia 0.7(以及大多数其他语言)中,我们可以期望在循环后 num = 1
。但是,它会在 Julia 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。但我确实想在循环外获取 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 在下面的回答中做出的出色评论:
Just remember that inside a function you won't use global, since the scope rules inside a function are as you would expect:
请参阅该答案,了解在没有作用域问题的情况下对相同代码使用函数的一个很好的示例。
请记住,您不会在函数内部使用 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 中出现。
关于此的更多信息 here
我正在从 Julia 0.7 升级到 1.0。似乎 Julia 对变量范围的规则从 0.7 变成了 1.0。例如,我想 运行 一个像这样的简单循环:
num = 0
for i = 1:5
if i == 3
num = num + 1
end
end
print(num)
在 Julia 0.7(以及大多数其他语言)中,我们可以期望在循环后 num = 1
。但是,它会在 Julia 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。但我确实想在循环外获取 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 在下面的回答中做出的出色评论:
Just remember that inside a function you won't use global, since the scope rules inside a function are as you would expect:
请参阅该答案,了解在没有作用域问题的情况下对相同代码使用函数的一个很好的示例。
请记住,您不会在函数内部使用 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 中出现。 关于此的更多信息 here