【问题标题】:Julia - ERROR: UndefVarError: not definedJulia - 错误:UndefVarError:未定义
【发布时间】:2019-06-27 11:20:16
【问题描述】:

我有一段代码在循环外工作,但在循环内失败。

见:

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 not defined”)?

(我有 Julia v"1.1.1",在 Mac OSX 上)

【问题讨论】:

    标签: julia


    【解决方案1】:

    在变量对我有用之前添加global

    for q=1:2
      if (rat[q] - margin) > beta
        global beta = rat[q] - margin
      end
    end
    

    【讨论】:

    【解决方案2】:

    Julia 有一种非常特殊的方式来处理全局范围。变量范围的规则可以在这里阅读:https://docs.julialang.org/en/v1/manual/variables-and-scoping/#Global-Scope-1。 Julia-1.0 中引入了新的作用域规则,它们在社区中引起了很大的争议,特别是因为 for 循环在全局作用域中的不直观行为。对于非常感兴趣的,这里有一个利弊的讨论:

    【讨论】:

    • 确实,我很困惑。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多