我有一段代码可以在循环外运行,但是在循环内失败。
请参阅:
julia> margin = 1
1
julia> rat = [-0.3 ; -0.8]
2-element Array{Float64,1}:
-0.3
-0.8
julia> beta = 0
0
julia> for q=1:2
if rat[q] - margin > beta
beta = rat[q] - margin
end
end
ERROR: UndefVarError: beta not defined
Stacktrace:
[1] top-level scope at ./REPL[803]:2 [inlined]
[2] top-level scope at ./none:0
julia> q=1
1
julia> if rat[q] - margin > beta
beta = rat[q] - margin
end
julia> q=2
2
julia> if rat[q] - margin > beta
beta = rat[q] - margin
end
有人可以解释此错误(“ ERROR:UndefVarError:beta未定义”)吗?
(在Mac OSX上,我的茱莉亚v为“ 1.1.1”)
答案 0 :(得分:2)
朱莉娅(Julia)处理全球范围的方法非常特殊。变量范围的规则可以在这里阅读:https://docs.julialang.org/en/v1/manual/variables-and-scoping/#Global-Scope-1。新的作用域规则是在Julia-1.0中引入的,在社区中引起了极大的争议,特别是因为全局范围内for循环的不直观行为。对于非常感兴趣的人,这里有一个利弊讨论:
答案 1 :(得分:1)
在变量对我有用之前添加global
:
for q=1:2
if (rat[q] - margin) > beta
global beta = rat[q] - margin
end
end