UndefVarError,但明确定义了变量

时间:2018-11-07 22:09:43

标签: julia

假设我有以下代码,其中包含两个嵌套的while循环。

 struct Parameters

      maxIter1::Float64
      maxIter2::Float64

      tolerance1::Float64
      tolerance2::Float64

 end

 mutable struct Guess

      x1::Float64
      x2::Float64

 end

 function solveModel(par::Parameters,initGuess::Guess)

      iterate1 = 0
      error1 = 0

      guess = initGuess

      while (par.iterate1 < par.maxIter1 && error1 > par.tolerance1)

           iterate1 += 1

           iterate2 = 0
           error2 = 0

           guess.x2 = initGuess.x2

           while (iterate2 < par.maxIter2 && error2 > par.tolerance2)

                iterate2 += 1

                z2 = solveInnerProblem(par,guess)

                newGuess = update2(par,guess,z2)

                error2 = computeError2(newGuess,guess)

                guess = newGuess

           end

           guess = newGuess

      end 
 end

我收到一条错误消息,

enter image description here

注意:对行号的引用是错误的-我的代码的第294行没有提及newGuess。

如果我注释掉该行,则错误消息消失

 guess = newGuess    

在外循环中(代码段中最后两行end之前的最后一行)。我很困惑为什么会这样。变量newGuess的定义很明确,但是Julia表示没有定义...

1 个答案:

答案 0 :(得分:2)

newGuess是一个局部变量,这意味着它是在程序的本地化部分而不是整个程序中定义的。对于在while语句之类的循环内定义的局部变量,该变量在定义该变量的 while 循环之外未定义,这是函数的内部while循环。因此,“未定义”错误是因为程序正在尝试访问其局部范围之外的变量-它是在之前定义的,而不是在发生错误时定义的。

您可能需要在函数中的更高位置(但在内部while语句之前)定义newGuess。