朱莉娅-错误:UndefVarError:未定义

时间:2019-06-27 11:20:16

标签: julia

我有一段代码可以在循环外运行,但是在循环内失败。

请参阅:

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”)

2 个答案:

答案 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