您好,欢迎访问三七文档
Lua参考手册Wikipedia,自由的百科全书Lua5.0参考手册作者:RobertoIerusalimschy,LuizHenriquedeFigueiredo,WaldemarCelesCopyright©2003Tecgraf,PUC-Rio.Allrightsreserved.主要译者、维护人员:曹力丁舜佳[NirvanaStudio()]目录[隐藏]11-绪论22-语言2.12.1-词法约定2.22.2-值和类型2.2.12.2.1-类型转换2.32.3-变量2.42.4-语句2.4.12.4.1-语句段2.4.22.4.2-语句块2.4.32.4.3-赋值2.4.42.4.4-控制结构2.4.52.4.5-For语句2.4.62.4.6-语句式函数调用2.4.72.4.7-局部变量声明2.52.5-表达式2.5.12.5.1-算术运算符2.5.22.5.2-关系运算符2.5.32.5.3-逻辑运算符2.5.42.5.4-串联接2.5.52.5.5-优先级2.5.62.5.6-表构造器2.5.72.5.7-函数调用2.5.82.5.8-函数定义2.62.6-可见性规则2.72.7-错误处理2.82.8-元表2.92.9-垃圾收集2.9.12.9.1-垃圾收集元方法2.9.22.9.2-弱表2.102.10-同步程序33-应用程序接口3.13.2-堆栈和索引3.23.3-堆栈操作3.33.4-堆栈查询3.43.5-堆栈取值3.53.6-将值压入堆栈3.63.7-控制垃圾收集3.73.8-用户数据类型3.83.9-元表3.93.10-加载Lua语句段3.103.11-表操作3.113.13-将表作为数组使用3.123.14-调用函数3.133.15-受保护调用3.143.16-定义C函数3.153.17-定义C函数闭包3.163.18-注册表3.173.19-C中的错误处理3.183.20-线程44-调试接口4.14.1-堆栈及函数信息4.24.2-操作局部变量和上值4.34.3-钩子55-标准库5.15.1-基本函数5.25.2-CoroutineMani***tion5.35.3-StringMani***tion5.3.1string.byte(s[,i])5.3.2string.char(i1,i2,...)5.3.3string.dump(function)5.3.4string.find(s,pattern[,init[,plain]])5.3.5string.len(s)5.3.6string.lower(s)5.3.7string.rep(s,n)5.3.8string.sub(s,i[,j])5.3.9string.upper(s)5.45.4-TableMani***tion5.55.5-MathematicalFunctions5.65.6-InputandOutputFacilities5.75.7-OperatingSystemFacilities5.85.8-TheReflexiveDebugInterface66-Lua独立程序7致谢8与以前版本的不兼容性8.1语言上的变动8.2库的变更8.3API上的改动9Lua完整语法参考1-绪论Lua是一种为支持有数据描述机制的一般过程式编程语言而设计的扩展编程语言。它同样可以对面向对象语言、函数式程序设计(FunctionalProgramming,如Lisp)以及数据驱动编程(data-drivenprogramming)提供很好的支持。它的目标是被用作一种强大的、轻型的配置语言。Lua目前已经被实现为一个扩展库,是用cleanC(ANSIC/C++的一个通用子集)编写的。作为一个扩展语言,Lua没有Main函数的概念:它仅仅是嵌入一个宿主程序进行工作,可以称之为嵌入式编程或者简单的说是宿主编程。这个宿主程序可以调用函数来执行Lua的代码片断,可以设置和读取Lua的变量,可以注册C函数让Lua代码调用。Lua的能力可以扩展到更大范围,在不同的领域内,这样就在同样的语法框架下创建了你自定义的编程语言。Lua的发行版包括一个独立的嵌入式程序,lua,他使用Lua的扩展库来提供一个完全的Lua解释器。Lua是自由软件,通常不提供任何担保,如它的版权说明中叙述的那样。手册中描述的实现在Lua的官方网站可以找到,。如果需要知道Lua设计背后的一些决定和讨论,可以参考以下论文,它们都可以在Lua的网站上找到。R.Ierusalimschy,L.H.deFigueiredo,andW.Celes.Lua---anextensibleextensionlanguage.Software:Practice&Experience26#6(1996)635-652.L.H.deFigueiredo,R.Ierusalimschy,andW.Celes.Thedesignandimplementationofalanguageforextendingapplications.ProceedingsofXXIBrazilianSeminaronSoftwareandHardware(1994)273-283.L.H.deFigueiredo,R.Ierusalimschy,andW.Celes.Lua:anextensibleembeddedlanguage.Dr.Dobb'sJournal21#12(Dec1996)26-33.R.Ierusalimschy,L.H.deFigueiredo,andW.Celes.Theevolutionofanextensionlanguage:ahistoryofLua,ProceedingsofVBrazilianSymposiumonProgrammingLanguages(2001)B-14-B-28.Lua在葡萄牙语中的意思是“月亮”,发音是LOO-ah。2-语言这一章将描述Lua的词法、语法和语义结构。换句话说,这一章会讲什么标记是合法的,他们是如何组合的,以及他们的组合是什么含义。语言结构会使用常用的扩展BNF范式来解释,如{a}表示0或多个a,表示a是可选的(0个或1个)。非终端字体(不能显示的)用斜体表示,关键字是粗体,其他终端符号用typewriter(等宽)字体,并用单引号引出。2.1-词法约定Lua中的标识符(Identifiers)可以是任意的数字、字符和下划线“_”,但不能以数字开头。这条规则符合大多数编程语言中的标识符的定义。(字符的具体定义要根据系统的地区设置:任何区域设置可以认同的字母表中的字母都可以用在标识符中。)下面的关键字(keywords)为保留关键字不可以作为标识符出现:andbreakdoelseelseifendfalseforfunctionifinlocalnilnotorrepeatreturnthentrueuntilwhileLua对大小写敏感:and是一个保留字,但是And和AND是两个不一样的、但都合法的标识符。习惯上来说,以下划线开始且后面跟着大写字母的标识符(例如_VERSION)是为Lua内部变量所保留的。下面的字符(串)是其他的一些标记:+-*/^=~=====(){}[];:,......字符串(Literalstrings)以单引号或者双引号定界,同时可以包含以下C语言风格的转义字符:\a---铃声(bell)\b---回退(backspace)\f---formfeed\n---新行(newline)\r---回车(carriagereturn)\t---水平制表符(horizontaltab)\v---垂直制表符(verticaltab)\\---反斜杠(backslash)\---双引号(quotationmark)\'---单引号(apostrophe)\[---左方括号(leftsquarebracket)\]---右方括号(rightsquarebracket)另外,一个`\newline´(一个反斜杠加上一个真正的换行符)会导致字符串内的分行。字符串中的字符也可以使用转义字符`\ddd´通过数字值来指定。ddd是最多为3个十进制数字的序列。Lua中的字符串也可以包含8进制数字,包括嵌入零,它可以表示为`\0´。字符串也可以用双方括号来定界[[···]]。这种括号方式的语法,字符串可以跨越多行,也可以包含嵌套的,同时不会转义任何序列。方便起见,当开始的`[[´后面紧跟着一个换行符的话,这个换行符不会包括在字符串内。举个例子:在一个使用ASCII编码(其中`a´的编码是97,换行符是10,字符`1´是49)的系统中,以下四种格式得到的都是同一个字符串:1.alo\n123\2.'\97lo\10\04923'3.[[alo123]]4.[[alo123]]数值常量(Numericalconstants)可以有一个可选的底数部分和一个可选的指数部分。以下是有效的数值常量:33.03.1416314.16e-20.31416E1注释(Comments)可以在任何地方出现,必须在最前面加上双减号(--)。如果紧接着--的文本不是[[,那么会认为是一个短注释(shortcomment),这一行往后到行尾都是注释。否则,会认为是一个常注释(longcomment),注释直到相应的]]结束。长注释可以跨越多行,同时可以包含嵌套的[[···]]括号对。为了方便起见,文件的第一行如果是以#开始,这个机制允许Lua在Unix系统中用做一个脚本解释器(见6)。2.2-值和类型Lua是一种动态类型语言(dynamicallytypedlanguage)。这意味着变量是没有类型的;只有值才有。语言中没有类型定义。所有的值都包含他自身的类型。Lua中有八种基本类型:nil,boolean,number,string,function,userdata,thread和table。Nil空类型只对应nil值,他的属性和其他任何值都有区别;通常它代表没有有效的值。Boolean布尔类型有两种不同的值falseandtrue。在Lua中,nilandfalse代表成假条件;其他任何值都代表成真条件。Number数字类型表示实数(双精度浮点数)。(构建Lua解释器时也可以很容易地用其他内部的表示方式表示数字,如单精度浮点数或者长整型)。String字符串类型表示一个字符的序列。Lua字符串可以包含8位字符,包括嵌入的('\0')(见2.1)。函数是Lua中的第一类值(first-classvalues)。也就是说函数可以保存在变量中,当作参数传递给其他函数,或者被当作结果返回。Lua可以调用(和处理)Lua写的函数和C写的函数(见2.5.7)。用户数据类型(userdata)提供了让任意C数据储存在Lua变量中的功能。这种类型直接对应着一块内存,Lua中也没有任何预先定义的操作,除了赋值和一致性比较。然而,通过使用元表(metatables),程序员可以定义处理userdata的操作。(见2.8)。Userdata值不能在Lua中建立或者修改,只能通过CAPI。这保证了宿主程序的数据完整性。线程(thread)类型代表了相互独立的执行线程,用来实现同步程序。表(table)类型实现了联合数组,也就是说,数组不仅可以使用数字,还能使用其他的值(除了nil)。而且,tables可以是互异的(heterogeneous),他们可以保存任何类型的值(除了nil)。Tables是Lua中唯一的数据结构机制;他们可以用来表示一般数组,特征表,集合,记录,图,树等等。如果要表示记录,Lua使用字段名作为索引。语言支持a.name这种比较优美的表示方式,还有a[name]。在Lua中有几种建立表的简便方法(见2.5.6)。就像索引一样,表字段的值也可以是任何类型(除了n
本文标题:LUA参考手册
链接地址:https://www.777doc.com/doc-1909842 .html