朱莉娅:变量未定义

时间:2014-07-18 16:46:50

标签: variables global-variables julia

变量范围行为似乎很奇怪。代码块

tp = 1
function test2()
    println(tp)
end

非常适合

function test()
    if tp==0
       tp=tp-1
    end
end

给出异常" tp未定义"。有什么问题?

1 个答案:

答案 0 :(得分:14)

由于变量被隐式定义为局部或全局变量的方式,以及函数中定义以后可能影响其在整个函数中的作用域的事实,这很棘手。

在第一种情况下,tp默认为全局变量,并且它按预期工作。但是,在第二种情况下,您分配给tp。这一点,正如手册的scope of variables section中所述:

  

&#34;作业x = y只有在x既未声明为全局,也未在任何封闭范围之前作为本地引入或之后<{1}}时引入新的本地变量x / em>当前的代码行。&#34;

因此,通过分配给tp,您已隐式将其声明为局部变量!现在它将影响全局的定义...除了您首先尝试访问它。解决方案很简单:如果要分配给它们,请明确声明任何变量为全局变量:

   function test()
       global tp
       if tp==0
          tp=tp-1
       end
   end

这里的行为非常微妙,但它非常一致。我知道在我终于理解了它的工作原理之前,我花了一些时间阅读了手册的这一部分。如果您能想出更好的描述方式,请说些什么!