lua参考手册

上传人:xzh****18 文档编号:34610767 上传时间:2018-02-26 格式:DOC 页数:9 大小:68KB
返回 下载 相关 举报
lua参考手册_第1页
第1页 / 共9页
lua参考手册_第2页
第2页 / 共9页
lua参考手册_第3页
第3页 / 共9页
lua参考手册_第4页
第4页 / 共9页
lua参考手册_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《lua参考手册》由会员分享,可在线阅读,更多相关《lua参考手册(9页珍藏版)》请在金锄头文库上搜索。

1、lua 参考手册 关键字:and break do else elseif end false for function if in local nil not or repeat return then true untilwhile使用变量不需要声明,总是全局变量,除非加local。local 的作用域是在最里层的 end 和其配对的关键字之间。全局变量的作用域是整个程序。大小写相关。定义一个变量的方法就是赋值操作。变量类型,可以用 type()函数来检查:Nil 空值,所有没有使用过的变量都是 nil。nil 既是值又是类型。变量清除直接给变量赋以 nil 值。Boolean 布尔值 t

2、rue 和 false。只有 false 和 nil 才被计算为 false,而所有任何其它类型的值,都是 true。比如 0,空串等等,都是 true。Number 数值,相当于 C 语言的 double 实数如:4 0.4 4.57e-3 0.3e12 5e+20Userdata 可以是宿主的任意数据类型,常用的有 Struct 和指针。Thread线程类型,在 Lua 中没有真正的线程,将一个函数分成几部份运行。String 字符串,可以包含0字符,可以定义很长的字符串。用双引号或单引号引用单行,和引用多行字符串。新版支持=和=多层标记,=号个数为层数。严格按层数匹配。支持一些转义字符:

3、a 铃b 退格f 换页n 换行r 回车t 制表符v 垂直制表 反斜杠 双引号 单引号左中括号右中括号Table 关系表类型,功能强大。可以用除了 nil 任意类型的值来作数组的索引和内容。Table 的定义:T1 = T11=10 T1John=Age=27, Gender=Male这一句相当于 T1JohnGender=Male索引是字符串时可以简写成:T1.John.Gender=Male或 T1.John=Age=27, Gender=Male第一,所有元素之间,总是用逗号,隔开;第二,所有索引值都需要用和括起来;如果是字符串,还可以去掉引号和中括号;第三,如果不写索引,则索引就会被认为

4、是数字,并按顺序自动从 1 往后编;T1=10, - 相当于 1 = 10100 = 40,John= - 如果你原意,你还可以写成:John =Age=27, - 如果你原意,你还可以写成:Age =27Gender=Male - 如果你原意,你还可以写成: Gender =Male,20 - 相当于 2 = 20Function 函数也是一种类型,也就是说所有的函数本身就是一个变量。函数的定义:function add(a,b) return a+b end 相当于 add = function (a,b) return a+b end如果函数只有一个参数,可以省略括号。return 语言

5、一定要写在 end 之前。在中间放上 return,写成:do return end。函数可以接受可变参数个数,用.来定义 function sum (a,b,.)如果想取得.所代表的参数,5.0 版本可以在函数中访问 arg 局部变量(表类型)得到。如 sum(1,2,3,4)则,a = 1, b = 2, arg = 3, 4,在 5.1 版本多了一个.变量(实际就是参数列表) ,区别只在于 arg 和. 共同存在的情况, .会使 arg 变 nil。可以同时返回多个结果,比如:function s() return 1,2,3,4 enda,b,c,d = s() - 此时,a = 1,

6、 b = 2, c = 3, d = 4使用面向对象编程:t = Age = 27, add = function(self, n) self.Age = self.Age+n endprint(t.Age) - 27t.add(t, 10) 可以简写成:t:add(10)print(t.Age) - 37单行注释-。只要-后面第一个字符不是多行字符串引用符,即为多行注释。语句之间可以用分号;隔开,也可以用空白隔开。条件控制:if 条件 then elseif 条件 then else endWhile 循环:while 条件 do endRepeat 循环:repeat until 条件Fo

7、r 循环:for 变量 = 初值,终点值,步进 do end可以省略步进值,这时候,for 循环会使用 1 作为步进值。For 循环:for 变量 1,变量 2, ,变量 N in 表或枚举函数 do end语句块用 do 和 end 括起来的。可以在函数中和语句块中定局部变量。赋值语句可以同时给多个变量赋值。例如:a,b,c,d=1,2,3,4 甚至是:a,b=b,a 方便的交换变量功能默认变量总是全局的。定义局部变量,则在第一次赋值的时候用 local 说明。比如:local a,b,c = 1,2,3 - a,b,c 都是局部变量数值运算支持 +, -, *, /,#,%。表示指数乘方。

8、比如 23 结果为 8。5.1 版加了#长度运算符。字符串的长度单位为字节,表的长度为 nil 前的整数索引个数,也就是数组的个数,如果有名为 n 的索引,它的值就是长度。5.1 版引进%模运算。用. 连接两个字符串。如:This a . string. - 等于 this a string比较运算 = = =分别表示小于,大于,不大于,不小于,相等,不相等。总是返回true 或 false。对于 Table,Function 和 Userdata 类型的数据,只有 = 和 =可以用。相等表示两个变量引用的是同一个数据。比如:a=1,2b=aprint(a=b, a=b) - true, fa

9、lsea=1,2b=1,2print(a=b, a=b) - false, true逻辑运算 and, or, not 只有 false 和 nil 才计算为 false,其它任何数据都计算为 true,0 也是true!and 和 or 的运算结果不是 true 和 false,而是和它的两个操作数相关。a and b:如果 a 为 false,则返回 a;否则返回 ba or b:如果 a 为 true,则返回 a;否则返回 b运算符优先级,从高到低顺序如下:not - (一元运算)#* / %+ - .(字符串连接)= = =andor=常用标准库函数:print ()把所有参数打印出来

10、,利用 tostring (e)转换非字符。奇怪的是 nil 不能做.操作。table.insert (table, pos, value)在 pos 位置插入一个值,默认是末尾。table.remove (table , pos)在 pos 位置删除一个值,默认是末尾。table.concat (table , sep , i , j)用 sep 来连接数组里从 i 到 j 字符串或数字并返回一个长字符串,默认用空串从 1 到末尾。如果 j 大于 i,返回空串。table.maxn (table)返回最大正数索引或 0。table.sort (table , comp)对数组排序,排序函数默

11、认是/?.lua;?.lua 和 LUA_CPATH=/?.dll;?.dll。然后运行 lua 解析器, require 相应的 socket 包就可以了。在 VC+6 下编译带 lua 的.dll 文件的时候,在工程设置里必须指明 LIBC.lib Libcmtd.lib 的加载顺序。选择 VC 菜单 Project-Settings-Link-Catagory 然后在 Object/library Modules 的Edit 栏中填入 LIBC.lib Libcmtd.lib。否则会出现:Linking.LIBC.lib(crt0dat.obj) : error LNK2005: _ci

12、nit already defined in LIBCMTD.lib(crt0dat.obj)新版本下表迭带需要加 pairs(t),旧版本以下代码结果是正确的:Lua 5.1.2 Copyright (C) 1994-2007 Lua.org, PUC-Rio function print_contents(t) for k,v in t do print(k . = . v) end end print_contentsx=10, y=20stdin:2: attempt to call a table valuestack traceback:stdin:2: in function p

13、rint_contentsstdin:1: in main chunkC: ?新版本中的.和 arg 不能同时出现,无论先后, .的出现都会使 arg 为 nil:print(#arg)function test(.)-print(.)print(type(arg),#arg)-print(.)endtest(1,2,3,4)print(#arg)运行结果:E:lua5_1_2_Win32_binlua5.1 e.lua 1 2 33table 43结果说明 arg 在新版本中还是可以使用的,但跟. 冲突,跟全局表 arg 不冲突。但本地 arg会覆盖全局的 arg,如果两者都要调用该如何处理

14、?使用.后,编译器仍然把函数里的 arg看成是局部变量。因此变通的方法是:print(#arg)t=argfunction test(.)print(.)arg=tprint(type(arg),#arg)-print(.)endtest(1,2,3,4)print(#arg)这和旧版本是一样的。看来引入.的用意不是为了区分全局和局部的 arg。那究竟是为了什么呢?lua 安装:Windows: 把 etc 目录下的 luavs.bat 拷到 lua 的解压根目录下直接运行, 生成的.h .dll .lib .exe 文件都在src 下。Linux:$make linux & make ins

15、tall 标准的 linux 安装在 Windows XP SP2 下使用 Visual C+ 6. 编译 lua 的过程分为 3 步:1,建立静态库工程,编译库文件Lua 库由标准库和核心库组成,我用的是 5.1 版本,所有代码都放在 src 目录中。把src 目录中除 lua.c,luac.c 文件外所有的*.c 文件添加到项目中,设置一下输出路径,F7 编译就可以了。2,建立 Win32 控制台工程 编译 lua.exe Lua 解释器把 lua.c 添加到工程中, link 选项中包含进刚才编译好的 lib 文件,F7 编译3.再建立 Win32 控制台工程, 编译 luac.exe Lua 编译器同上步一样,编译成功后生成 luac.exe, 最好把这两个文件放在新建的 bin 文件下,在添加进系统的环境变量。 tolua+在 cygwin 下不用 SCons 编译:详见 http:/lua-users.org/wiki/CompilingToluappWithoutSconssrc/l

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 理论文章

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号