Julia 未定义变量错误,但变量定义明确

Julia 未定义变量错误,但变量定义明确,julia,Julia,假设我有下面的代码,它有两个嵌套的while循环 struct Parameters maxIter1::Float64 maxIter2::Float64 tolerance1::Float64 tolerance2::Float64 end mutable struct Guess x1::Float64 x2::Float64 end function solveModel(par::Param

假设我有下面的代码,它有两个嵌套的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

在外部循环中(代码段中最后两行
end
之前的最后一行)。我很不明白为什么会这样。变量
newGuess
定义明确,但Julia说它没有定义…

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


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

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


您可能需要在函数的更高层定义newGuess,但在内部while语句之前。

newGuess的作用域位于最内层while循环中。您可以尝试将声明移到它的外部(在循环之前)。newGuess的作用域位于最内部的while循环中。您可以尝试将声明移到声明之外(在循环之前)。
 guess = newGuess