Chinaunix首页 | 论坛 | 博客
  • 博客访问: 685623
  • 博文数量: 132
  • 博客积分: 10060
  • 博客等级: 上将
  • 技术积分: 1732
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-21 12:35
个人简介

迷惘的码农。

文章分类

全部博文(132)

文章存档

2013年(1)

2011年(2)

2010年(9)

2009年(41)

2008年(79)

我的朋友

分类:

2008-08-15 11:11:41

2.6 -

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

2.7 -

因为Lua是种嵌入式扩展语言,其所有的操作都是从宿主程序中的C代码调用Lua库函数(见)开始的。Lua编译或执行时值要发生错误,控制权就会交还给C,后者可以采取适当的措施(比如打印错误消息)。

Lua代码可以通过调用函数显式地产生错误。如果需要在Lua中捕获错误,可用函数。

阅读(1313) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~