迷惘的码农。
分类:
2008-08-15 11:11:41
Lua是种有词法作用域的语言。变量的作用域从声明后面的第一条语句开始,直到包含声明的最内层代码块的结尾。考虑下面的例子:
x = 10 -- 全局变量
do -- 新代码块
local x = x -- 新“x”,值为10
print(x) --> 10
x = x+1
do -- 另一个代码块
local x = x+1 -- 另一个“x”
print(x) --> 12
end
print(x) --> 11
end
print(x) --> 10(全局的)
注意,在类似local x = x
的声明中,新声明的x
还不在作用域中,所以第二个x
引用外部的变量。
根据词法作用域规则,局部变量可被定义于它们作用域内的函数自由访问。被内部函数使用的局部变量在该函数内被称为upvalue或外部局部变量(external local variable)。
注意,每次执行local语句会定义新局部变量。考虑下面的例子:
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
。
因为Lua是种嵌入式扩展语言,其所有的操作都是从宿主程序中的C代码调用Lua库函数(见)开始的。Lua编译或执行时值要发生错误,控制权就会交还给C,后者可以采取适当的措施(比如打印错误消息)。
Lua代码可以通过调用函数显式地产生错误。如果需要在Lua中捕获错误,可用函数。