假设我有下面的代码,它有两个嵌套的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我收到一条错误信息

注意:对行号的引用是erroenous --我的代码中的第294行没有提到任何newGuess。
如果我注释掉这一行,错误信息就会消失。
guess = newGuess 在外部循环中(代码片段中最后两行end之前的最后一行)。我很困惑为什么会发生这种事。变量newGuess是明确定义的,但是Julia说它没有定义.
发布于 2018-11-07 22:41:42
newGuess是一个局部变量,这意味着它是在程序的本地化部分而不是所有程序中定义的。对于在循环中定义的局部变量(如while语句),在定义变量的while循环之外未定义变量,该循环是函数的内部while循环。因此,“未定义”错误是因为程序试图在其本地范围之外访问变量--它是以前定义的,但不是在错误发生时定义的。
您可能需要在函数中更高的位置定义newGuess,但在内部while语句之前。
https://stackoverflow.com/questions/53198627
复制相似问题