变量作用域行为似乎相当奇怪。 代码块
tp = 1
function test2()
println(tp)
end
在不影响使用的情况下,可以完美运行。
function test()
if tp==0
tp=tp-1
end
end
出现“tp未定义”的异常。问题出在哪里?
变量作用域行为似乎相当奇怪。 代码块
tp = 1
function test2()
println(tp)
end
在不影响使用的情况下,可以完美运行。
function test()
if tp==0
tp=tp-1
end
end
出现“tp未定义”的异常。问题出在哪里?
由于变量隐式定义为局部变量或全局变量,以及函数内后面的定义会影响其整个作用域,因此这很棘手。
在第一种情况下,tp
默认为全局变量,并且按预期工作。但是,在第二种情况下,您对tp
进行了赋值。正如变量作用域部分的说明所示:
"仅当
x
在当前代码行之前或之后未被任何封闭作用域声明为全局变量或局部变量时,赋值x=y
才会引入新的局部变量x
。"
因此,通过对tp
进行赋值,您隐式地声明它为局部变量!现在它将掩盖您全局变量的定义......除非您首先尝试访问它。解决方法很简单:如果要对它们进行赋值,请明确声明任何要使用的变量为全局变量:
function test()
global tp
if tp==0
tp=tp-1
end
end
这里的行为非常微妙,但非常一致。在我最终理解它是如何工作之前,我知道我不得不反复阅读手册中的那部分内容。如果您能想出更好的描述方式,请说出来!