Lua初探-可见性规则
目录
- 更多分享:www.catbro.cn
Visibleility Rules
-
Lua是一种词汇范围的语言。局部变量的范围从其声明后的第一个语句开始,一直持续到包含声明的最内层块的最后一个非void语句。请考虑以下示例:
x = 10 -- global variable do -- new block local x = x -- new 'x', with value 10 print(x) --> 10 x = x+1 do -- another block local x = x+1 -- another 'x' print(x) --> 12 end print(x) --> 11 end print(x) --> 10 (the global one)
-
请注意,在像x = x这样的声明中,声明的新x尚未在范围内,因此第二个x引用外部变量。
-
因为词汇作用域规则,局部变量可以再被定义的函数范围内自由地访问。内部函数使用的局部变量在内部函数内称为upvalue或外部局部变量。
-
请注意,每次执行本地语句都会定义新的局部变量。请考虑以下示例:
a = {} local x = 20 for i=1,10 do local y = 0 a[i] = function () y=y+1; return x+y end end
-
循环创建十个闭包(即匿名函数的十个实例)。这些闭包中的每一个都使用不同的y变量,而所有闭包都使用相同的x。