变量作用域的行为看起来很奇怪。代码块
tp = 1
function test2()
println(tp)
end
工作得很好,同时
function test()
if tp==0
tp=tp-1
end
end
给出异常“tp 未定义”。怎么了?
由于变量被隐式定义为局部或全局的方式,并且定义的事实,这很棘手later函数中的作用域可以影响它们在整个函数中的作用域。
在第一种情况下,tp
默认为全局变量,并且它按您的预期工作。然而,在第二种情况下,你assign to tp
。这一点,正如在变量范围部分 http://docs.julialang.org/en/latest/manual/variables-and-scoping/手册的:
“一项任务x = y
引入一个新的局部变量x
除非x
既不声明为全局的,也不被之前或之前的任何封闭范围引入为本地的after当前代码行。”
所以,通过分配给tp
,您已隐式将其声明为局部变量!它现在将遮蔽您的全局定义......除非您尝试先访问它。解决方案很简单:如果要分配给任何变量,则显式声明它们为全局变量:
function test()
global tp
if tp==0
tp=tp-1
end
end
这里的行为非常微妙,但非常一致。我知道我花了几次时间阅读了手册的这一部分,然后才最终理解了它是如何工作的。如果你能想到更好的方式来描述它,请说出来!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)