Lua 5.0 参考手册1.doc
《Lua 5.0 参考手册1.doc》由会员分享,可在线阅读,更多相关《Lua 5.0 参考手册1.doc(97页珍藏版)》请在三一办公上搜索。
1、Lua 5.0 参考手册1 - 绪论Lua是一种为支持有数据描述机制的一般过程式编程语言而设计的扩展编程语言。它同样可以对面向对象语言、函数式程序设计(Functional Programming,如Lisp)以及数据驱动编程(data-driven programming)提供很好的支持。它的目标是被用作一种强大的、轻型的配置语言。Lua目前已经被实现为一个扩展库,是用clean C (ANSI C/C+的一个通用子集)编写的。 作为一个扩展语言,Lua没有Main函数的概念:它仅仅是嵌入一个宿主程序进行工作,可以称之为 嵌入式编程 或者简单的说是 宿主编程。这个宿主程序可以调用函数来执行L
2、ua的代码片断,可以设置和读取Lua的变量,可以注册C函数让Lua代码调用。Lua的能力可以扩展到更大范围,在不同的领域内,这样就在同样的语法框架下创建了你自定义的编程语言。 Lua的发行版包括一个独立的嵌入式程序,lua,他使用Lua的扩展库来提供一个完全的Lua解释器。 Lua是自由软件,通常不提供任何担保,如它的版权说明中叙述的那样。 手册中描述的实现在Lua的官方网站可以找到,www.lua.org。 如果需要知道Lua设计背?蟮囊恍龆吞致郏梢圆慰家韵侣畚模嵌伎梢栽贚ua的网站上找到。 R.Ierusalimschy, L.H.de Figueiredo, and W.Celes. L
3、ua-an extensible extension language. Software: Practice & Experience 26 #6 (1996) 635-652. L.H.de Figueiredo, R.Ierusalimschy, and W.Celes. The design and implementation of a language for extending applications. Proceedings of XXI Brazilian Seminar on Software and Hardware (1994) 273-283. L.H.de Fig
4、ueiredo, R.Ierusalimschy, and W.Celes. Lua: an extensible embedded language. Dr. Dobbs Journal 21 #12 (Dec 1996) 26-33. R.Ierusalimschy, L.H.de Figueiredo, and W.Celes. The evolution of an extension language: a history of Lua, Proceedings of V Brazilian Symposium on Programming Languages (2001) B-14
5、-B-28. Lua在葡萄牙语中的意思是“月亮”,发音是 LOO-ah。 2 - 语言这一章将描述Lua的词法、语法和语义结构。换句话说,这一章会讲什么标记是合法的,他们是如何组合的,以及他们的组合是什么含义。 语言结构会使用常用的扩展BNF范式来解释,如a表示0或多个a, a表示a是可选的(0个或1个)。非终端字体(不能显示的)用 斜体表示,关键字是粗体,其他终端符号用typewriter(等宽)字体,并用单引号引出。 2.1 - 词法约定Lua中的标识符(Identifiers)可以是任意的数字、字符和下划线“_”,但不能以数字开头。这条规则符合大多数编程语言中的标识符的定义。(字符的具体
6、定义要根据系统的地区设置:任何区域设置可以认同的字母表中的字母都可以用在标识符中。) 下面的关键字(keywords)为保留关键字不可以作为标识符出现: and break do else elseif end false for function if in local nil not or repeat return then true until whileLua对大小写敏感:and是一个保留字,但是 And 和 AND 是两个不一样的、但都合法的标识符。习惯上来说,以下划线开始且后面跟着大写字母的标识符 (例如 _VERSION) 是为Lua内部变量所保留的。 下面的字符(串)是其他的
7、一些标记: + - * / = = = = ( ) ; : , . . .字符串(Literal strings) 以单引号或者双引号定界,同时可以包含以下C语言风格的转义字符: a - 铃声(bell) b - 回退(backspace) f - form feed n - 新行(newline) r - 回车(carriage return) t - 水平制表符(horizontal tab) v - 垂直制表符(vertical tab) - 反斜杠(backslash) - 双引号(quotation mark) - 单引号(apostrophe) - 左方括号(left square
8、 bracket) - 右方括号(right square bracket) 另外,一个 newline (一个反斜杠加上一个真正的换行符)会导致字符串内的分行。字符串中的字符也可以使用转义字符ddd通过数字值来指定。ddd 是最多为3个十进制数字的序列。Lua中的字符串也可以包含8进制数字,包括嵌入零,它可以表示为 0。 字符串也可以用双方括号来定界 。这种括号方式的语法,字符串可以跨越多行,也可以包含嵌套的?辈换嶙迦魏涡蛄小奖闫鸺笨嫉? 后面紧跟着一个换行符的话,这个换行符不会包括在字符串内。举个例子:在一个使用ASCII编码(其中a 的编码是97,换行符是10,字符1 是49)的系统中,
9、以下四种格式得到的都是同一个字符串: (1) alon123 (2) 97lo1004923 (3) alo 123 (4) alo 123数值常量(Numerical constants) 可以有一个可选的底数部分和一个可选的指数部分。以下是有效的数值常量: 3 3.0 3.1416 314.16e-2 0.31416E1注释(Comments) 可以在任何地方出现,必须在最前面加上双减号 (-)。如果紧接着 - 的文本不是 ,那么会认为是一个 短注释(short comment), 这一行往后到行尾都是注释。否则,会认为是一个 常注释(long comment),注释直到相应的 结束。长注
10、释可以跨越多行,同时可以包含嵌套的 括号对。 为了方便起见,文件的第一行如果是以#开始,这个机制允许Lua在Unix系统中用做一个脚本解释器(见 6)。2.2 - 值和类型Lua是一种 动态类型语言(dynamically typed language)。这意味着变量是没有类型的;只有值才有。语言中没有类型定义。所有的值都包含他自身的类型。Lua中有八种基本类型:nil, boolean, number, string, function, userdata, thread 和 table。 Nil 空类型只对应 nil值,他的属性和其他任何值都有区别;通常它代表没有有效的值。 Boolean
11、 布尔类型有两种不同的值 false and true。在Lua中, nil and false 代表成假条件;其他任何值都代表成真条件。 Number 数字类型表示实数(双精度浮点数)。(构建Lua解释器时也可以很容易地用其他内部的表示方式表示数字,如单精度浮点数或者长整型)。 String 字符串类型表示一个字符的序列。Lua 字符串可以包含8位字符,包括嵌入的 (0) (见 2.1)。 函数是Lua中的 第一类值(first-class values)。也就是说函数可以保存在变量中,当作参数传递给其他函数,或者被当作结果返回。Lua可以调用(和处理)Lua写的函数和C写的函数 (见 2.
12、5.7)。 用户数据类型(userdata) 提供了让任意C数据储存在Lua变量中的功能。这种类型直接对应着一块内存,Lua中也没有任何预先定义的操作,除了赋值和一致性比较。然而,通过使用 元表(metatables),程序员可以定义处理userdata的操作。(见 2.8)。 Userdata 值不能在Lua中建立或者修改,只能通过 CAPI。这保证了宿主程序的数据完整性。 线程(thread) 类型代表了相互独立的执行线程,用来实现同步程序。 表(table) 类型实现了联合数组,也就是说,数组不仅可以使用数字,还能使用其他的值(除了 nil)。 而且,tables 可以是 互异的(het
13、erogeneous),他们可以保存任何类型的值(除了 nil)。 Tables 是Lua中唯一的数据结构机制;他们可以用来表示一般数组,特征表,集合,记录,图,树等等。如果要表示记录,Lua使用字段名作为索引。语言支持 a.name 这种比较优美的表示方式,还有 aname。在Lua中有几种建立表的简便方法 (见 2.5.6)。 就像索引一样,表字段的值也可以是任何类型(除了 nil)。特别需要注意地是,由于函数是第一型的值,表字段也可以包含函数。这样表也可以支持 方法(methods) (见 2.5.8)。 表,函数,和用户数据类型的值都是 对象(objects):变量不会包含他们的实际值
14、,只是一个他们的引用(references)。 赋值,参数传递和函数返回只是操作这些值的引用,这些操作不会暗含任何拷贝。 库函数 type 返回一个字符串描述给出值所表示的类型 (见 5.1)。 2.2.1 - 类型转换Lua提供运行时的数字和字符串值得自动转换。任何对字符串的算术操作都会现尝试?炎址怀墒郑褂靡话愎嬖蜃弧垂矗币桓鍪涤迷谛枰址牡胤绞保只嶙远怀勺址裱恢趾侠淼母袷健绻付等绾巫怀勺址胧褂米址庵械? format 函数(见 5.3)。2.3 - 变量变量是储存值的地方。Lua中有三种不同的变量:全局变量,局部变量和表字段。 一个名称可以表示全局变量或局部变量(或者一个函数的正式参数,一种
15、局部变量的特殊形式): var := NameLua假设变量是全局变量,除非明确地用local进行声明 (见 2.4.7)。局部变量有 词义范围(lexically scoped):局部变量可以被在它们范围内的函数自由访问 (见 2.6)。 在变量第一次赋值之前,它的值是 nil。 方括号用于对表进行检索: var := prefixexp exp 第一个表达式 (prefixexp)结果必须是表;第二个表达式 (exp) 识别表中一个特定条目。给出表的表达式有一个限制语法;详细见 2.5。 var.NAME 语法是 varNAME 的较好形式: var := prefixexp . Name
16、访问全局变量和表字段的实质可以通过元表进行改变。对索引变量 ti 的访问等同于调用 gettable_event(t,i)。(关于 gettable_event 的完整描述见 2.8。这个函数并没有在Lua中定义,也无法调用。我们在这里仅仅用来解释原理)。 所有的全局变量存在一个普通的Lua表中,称之为 环境变量表(environment tables) 或简称 环境(environments)。由C写的并导入到Lua中的函数 (C 函数) 全部共享一个通用 全局环境(global environment)。Lua写的每个函数 (a Lua 函数) 都有一个它自己的环境的引用,这样这个函数中的
17、所有的全局变量都会指向这个环境变量表。当新创建一个函数时,它会继承创建它的函数的环境。要改变或者获得Lua函数的环境表,可以调用 setfenv or getfenv (见 5.1)。 访问全局变量 x 等同于 _env.x,又等同于 gettable_event(_env, x)_env 是运行的函数的环境。(_env 变量并没有在Lua中定义。我们这里仅仅用来解释原理) 2.4 - 语句Lua支持一种很通俗的语句集,和Pascal或者C中的很相似。他包括赋值,控制结构,过程调用,表构造和变量声明。 2.4.1 - 语句段Lua执行的最小单元称之为一个 段(chunk)。一段语句就是简单的语
18、句的序列,以顺序执行。每一个语句后面都可以加上一个分号(可选): chunk := stat ;Lua将语句段作为一个匿名函数 (见 2.5.8) 的本体进行处理。这样,语句段可以定义局部变量或者返回值。 一段语句可以储存在文件内或者宿主程序的一个字符串中。当语句段被执行时,他首先被预编译成虚拟机使用的字节码,然后虚拟机用一个解释器执行被编译的代码。 语句段也可以被预编译为二进制代码;详情参看 luac 程序。源代码和编译形态可以互相转换;Lua自动监测文件类型然后作相应操作。 2.4.2 - 语句块一个语句块是一系列语句;从语句构成上来看,语句块等同于语句段:block := chunk一个
19、语句块可以明确定界来替换单个语句:stat := do block end显式语句块可以很好地控制变量的声明范围。显示语句块有时也常会在另一个语句块的中间添加 return 或 break 语句 (见 2.4.4)。 2.4.3 - 赋值Lua允许多重赋值。因此,赋值的语法定义为:等号左边是一个变量表,右边是一个表达式表。两边的表中的元素都用逗号分隔开来:stat := varlist1 = explist1varlist1 := var , varexplist1 := exp , exp我们将在 2.5 讨论表达式。 在赋值之前,值的表长度会被 调整 为和变量的表一样。如果值比需要的多,多
20、出的值就会被扔掉。如果值的数量不够,就会用足够多的 nil 来填充表直到满足数量要求。如果表达式表以一个函数调用结束,那么在赋值之前,函数返回的所有的值都会添加到值的表中(除非把函数调用放在括号里面;见 2.5)。 赋值语句首先计算出所有的表达式,然后才会执行赋值,所以代码: i = 3 i, ai = i+1, 20设置 a3 为 20,但不影响 a4。因为在 ai 中的 i 在赋值为4之前是等于3。同样的,下面这行: x, y = y, x可以交换 x 和 y 的值。 对全局变量和表字段的赋值可以看作是通过元表进行的。对一个索引变量的赋值 ti = val 等同于 settable_eve
21、nt(t,i,val)。 (settable_event详细介绍参看 2.8 ,Lua中并未定义该函数,他也无法直接调用。我们这里只是用它来进行解释。) 对全局变量的赋值 x = val 等同于赋值语句 _env.x = val,像前面也等同于: settable_event(_env, x, val)_env 是运行函数的环境。(_env 变量并未在Lua中定义。我们这里只是用来进行解释。) 2.4.4 - 控制结构控制结构 if, while 和 repeat 具有通用的含义和类似的语法: stat := while exp do block endstat := repeat block
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Lua 5.0 参考手册1 参考手册
链接地址:https://www.31ppt.com/p-2884666.html