变量范围行为似乎很奇怪。代码块
tp = 1
function test2()
println(tp)
end
非常适合
function test()
if tp==0
tp=tp-1
end
end
给出异常" tp未定义"。有什么问题?
答案 0 :(得分:14)
由于变量被隐式定义为局部或全局变量的方式,以及函数中定义以后可能影响其在整个函数中的作用域的事实,这很棘手。
在第一种情况下,tp
默认为全局变量,并且它按预期工作。但是,在第二种情况下,您将分配给tp
。这一点,正如手册的scope of variables section中所述:
"作业
x = y
只有在x
既未声明为全局,也未在任何封闭范围之前作为本地引入或之后<{1}}时引入新的本地变量x
/ em>当前的代码行。&#34;
因此,通过分配给tp
,您已隐式将其声明为局部变量!现在它将影响全局的定义...除了您首先尝试访问它。解决方案很简单:如果要分配给它们,请明确声明任何变量为全局变量:
function test()
global tp
if tp==0
tp=tp-1
end
end
这里的行为非常微妙,但它非常一致。我知道在我终于理解了它的工作原理之前,我花了一些时间阅读了手册的这一部分。如果您能想出更好的描述方式,请说些什么!