首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UndefVarError但是变量是明确定义的

UndefVarError但是变量是明确定义的
EN

Stack Overflow用户
提问于 2018-11-07 22:09:43
回答 1查看 110关注 0票数 0

假设我有下面的代码,它有两个嵌套的while循环。

代码语言:javascript
复制
 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。

如果我注释掉这一行,错误信息就会消失。

代码语言:javascript
复制
 guess = newGuess    

在外部循环中(代码片段中最后两行end之前的最后一行)。我很困惑为什么会发生这种事。变量newGuess是明确定义的,但是Julia说它没有定义.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-07 22:41:42

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53198627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档