假设我有以下代码,其中包含两个嵌套的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
我收到一条错误消息,
注意:对行号的引用是错误的-我的代码的第294行没有提及newGuess。
如果我注释掉该行,则错误消息消失
guess = newGuess
在外循环中(代码段中最后两行end
之前的最后一行)。我很困惑为什么会这样。变量newGuess
的定义很明确,但是Julia表示没有定义...
答案 0 :(得分:2)
newGuess是一个局部变量,这意味着它是在程序的本地化部分而不是整个程序中定义的。对于在while语句之类的循环内定义的局部变量,该变量在定义该变量的 while
循环之外未定义,这是函数的内部while循环。因此,“未定义”错误是因为程序正在尝试访问其局部范围之外的变量-它是在之前定义的,而不是在发生错误时定义的。
您可能需要在函数中的更高位置(但在内部while语句之前)定义newGuess。