lua各种库
- 格式:doc
- 大小:148.00 KB
- 文档页数:8
1.math库函数名描述示例结果pi圆周率math.pi 3.1415926535898abs取绝对值math.abs(-2012)2012ceil向上取整math.ceil(9.1)10floor向下取整math.floor(9.9)9max取参数最大值math.max(2,4,6,8)8min取参数最小值math.min(2,4,6,8)2pow计算x的y次幂math.pow(2,16)65536sqrt开平方math.sqrt(65536)256mod取模math.mod(65535,2)1modf取整数和小数部分math.modf(20.12)200.12randomseed设随机数种子math.randomseed(os.time())random取随机数math.random(5,90)5~90rad角度转弧度math.rad(180) 3.1415926535898deg弧度转角度math.deg(math.pi)180exp e的x次方math.exp(4)54.598150033144log计算x的自然对数math.log(54.598150033144)4log10计算10为底,x的对数math.log10(1000)3frexp将参数拆成x*(2^y)的形式math.frexp(160)0.6258ldexp计算x*(2^y)math.ldexp(0.625,8)160sin正弦math.sin(math.rad(30))0.5cos余弦math.cos(math.rad(60))0.5tan正切math.tan(math.rad(45))1asin反正弦math.deg(math.asin(0.5))30acos反余弦math.deg(math.acos(0.5))60atan正切math.deg(math.atan(1))452、lua table库table.concat(table,sep,start,end)concat是concatenate(连锁,连接)的缩写.table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素,元素间以指定的分隔符(sep)隔开。
LUAstring库详解1. string库中所有的字符索引从前往后是1,2,...;从后往前是-1,-2,...2. string库中所有的function都不会直接操作字符串,⽽是返回⼀个结果s = "[abc]"string.len(s) <==返回5string.rep("abc", 2) <==返回"abcabc"string.lower("ABC") <==返回"abc"string.upper("abc") <==返回"ABC"string.sub(s, 2) <==返回"abc]"string.sub(s, -2) <==返回"c]"string.sub(s, 2, -2) <==返回"abc"string.format(fmt, ...)返回⼀个类似printf的格式化字符串string.find(s, pattern, pos)第1个参数:源字符串第2个参数:待搜索之模式串第3个参数:A hint, 从pos位置开始搜索找到匹配返回:匹配串开始和结束的位置,否则返回nil简单的模式串s = "hello world"i, j = string.find(s, "hello")print(i, j) --> 1 5print(string.sub(s, i, j)) --> helloprint(string.find(s, "world")) --> 7 11i, j = string.find(s, "l")print(i, j) --> 3 3print(string.find(s, "lll")) --> nil格式化的模式串s = "Deadline is 30/05/1999, firm"date = "%d%d/%d%d/%d%d%d%d"print(string.sub(s, string.find(s, date))) --> 30/05/1999下⾯的表列出了Lua⽀持的所有字符类:. 任意字符%s 空⽩符%p 标点字符%c 控制字符%d 数字%x ⼗六进制数字%z 代表0的字符%a 字母%l ⼩写字母%u ⼤写字母%w 字母和数字上⾯字符类的⼤写形式表⽰⼩写所代表的集合的补集。
Lua中的string库(字符串函数库)总结Lua解释器对字符串的⽀持很有限。
⼀个程序可以创建字符串并连接字符串,但不能截取⼦串,检查字符串的⼤⼩,检测字符串的内容。
在Lua中操纵字符串的功能基本来⾃于string库。
字符串库中的⼀些函数是⾮常简单的:string.len(s) 返回字符串s的长度;string.rep(s, n) 返回重复n次字符串s的串;你使⽤string.rep("a", 2^20)可以创建⼀个1M bytes的字符串(⽐如,为了测试需要);string.lower(s) 将s中的⼤写字母转换成⼩写(string.upper将⼩写转换成⼤写)。
如果你想不关⼼⼤⼩写对⼀个数组进⾏排序的话,你可以这样:复制代码代码如下:table.sort(a, function (a, b) return string.lower(a) < string.lower(b) end)string.upper(s) 将s中的⼩写字母转换成⼤写string.upper和string.lower都依赖于本地环境变量。
所以,如果你在 European Latin-1环境下,表达式:复制代码代码如下:string.upper("a??o") --> "A??O"string.sub(s,i,j) 函数截取字符串s的从第i个字符到第j个字符之间的串。
Lua中,字符串的第⼀个字符索引从1开始。
你也可以使⽤负索引,负索引从字符串的结尾向前计数:-1指向最后⼀个字符,-2指向倒数第⼆个,以此类推。
所以, string.sub(s, 1, j)返回字符串s的长度为j的前缀;string.sub(s, j, -1)返回从第j个字符开始的后缀。
如果不提供第3个参数,默认为-1,因此我们将最后⼀个调⽤写为string.sub(s, j);string.sub(s, 2, -2)返回去除第⼀个和最后⼀个字符后的⼦串。
lua utf8库原理Lua 中的utf8 库提供了对UTF-8 编码的支持,允许在Lua 中处理和操作 Unicode 字符。
UTF-8 是一种可变长度字符编码,广泛用于表示 Unicode 字符集。
以下是 utf8 库的一些主要函数以及它们的简要原理:utf8.len(s):返回字符串 s 中 UTF-8 编码字符的数量。
luaCopy codelocal length = utf8.len("你好") -- 返回 2,因为有两个字符utf8.codepoint(s, [i, [j]]):返回字符串 s 中指定位置范围 [i, j] 的 Unicode 码点。
luaCopy codelocal codepoint = utf8.codepoint("你好", 2, 2) -- 返回"好" 的 Unicode 码点utf8.offset(s, n, [i]):返回字符串 s 中从位置 i 开始的第 n 个字符的字节偏移量。
luaCopy codelocal offset = utf8.offset("你好", 2, 1) -- 返回 "好" 在字符串中的起始字节位置utf8.char(...):将传入的 Unicode 码点转换为对应的 UTF-8 字符。
luaCopy codelocal utf8_char = utf8.char(228, 189, 160) -- 返回 "你"utf8 库的实现基于 Lua 字符串的字节操作和一些 Unicode 规则。
UTF-8 的编码规则是根据 Unicode 码点的范围来决定使用几个字节表示一个字符,而utf8 库通过解析字节序列来实现相应的功能。
需要注意的是,UTF-8 编码中的某些字符可能需要多个字节表示,因此在处理 UTF-8 字符串时,需要考虑字符的长度和字节的偏移。
Lua5.2中的base库(转)Lua中base库里面的接口都是全局可见的,我在全局环境一篇里面已经谈到了。
在lua5.2中base库增加了2个全局变量和23个函数,这些都可以在lbaselib.c里面找到。
首先增加了两个变量:_G = 当前lua中的全局环境_VERSION = LUA_VERSION其中LUA_VERSION是一个宏,在每个版本的Lua中都不一样,定义在lua.h中可以看到如果我用print(_VERSION) 打印出来,那么显示的应该是Lua 5.2。
下面按照字典序来解释这23个函数,点击下面的函数名跳转到对应的位置:assertcollectgarbagedofileerrorgetmetatableipairsloadloadfileloadstringnextpairspcallprintrawequalrawlenrawgetrawsetselectsetmetatabletonumbertostringtypexpcallassert(v, [message])功能:抛出一个错误,当参数v 的值为nil 或者false 时,否则就返回assert 的所有参数。
用法:1、local a = assert(false, "this is a error") --引发一个错误,执行后会报一个错误,并打印出this is a error,如下:2、local a, b = assert(true, "this is a error") print(a, b)--不引发错误,返回assert 的所有参数,如下:collectgarbage(opt, [arg])功能:根据opt选项来操作垃圾收集器。
用法:opt有11个选项:stop:停止自动执行的垃圾收集器,直到下次显示调用restart 选项restart:重新启动自动执行的垃圾收集器collect:执行一次完整的垃圾收集循环count:返回lua使用的总内存大小,第一个返回值为内存大小(KB),第二个值为这个大小(BYTE)对1024取模的值step:执行指定步数的垃圾收集,步数由arg参数指定setpause:设置arg为当前垃圾收集器pause数,并返回设置前的值setstepmul:设置arg为当前垃圾收集器step multiplier的值,并返回设置前的值setmajorinc:设置arg为当前垃圾收集器setmajorinc的值,并返回设置前的值isrunning:返回垃圾收集器当前的状态,start状态为true,stop状态为falsegenerational:把垃圾收集器转换为generational模式incremental:把垃圾收集器转换为incremental模式dofile([fllename])功能:打开filename文件,并将其内容当做一个lua块来执行,如果filename缺省,则执行当前标准输入。
Lua中os库的使⽤(execute,date,clock,time)--更多详细参考 /post/2011-10-09/5660047 ----更多详细参考 /goodai007/article/details/8077285--local function main()print(os.clock()) --print(os.time())dateTable = os.date("*t") --返回⼀张时间table表{year,month,day,hour,min,sec}print(dateTable.year.."~"..dateTable.month.."~"..dateTable.day.."~"..dateTable.hour.."~"..dateTable.min.."~"..dateTable.sec)print("rename and remove~~")os.rename("./src/Demo.txt","./Demo.bbb") --os.rename()操作可以移动⽂件的位置只需要在rename时,重新配置路径就可以了os.remove("./Demo.bbb") --删除⽂件--执⾏命令os.execute("mkdir vokie123") --创建⽂件夹os.execute("ls")os.execute("dir")os.execute("pause")os.exit() --停⽌Lua的主线程endmain()输出结果:0.04613856091042013~11~28~11~25~4rename and remove~~srcvokie123驱动器 D 中的卷是 SOFTWARE卷的序列号是 8236-DBD6D:\luaDev\Test2 的⽬录2013-11-28 10:26 <DIR> .2013-11-28 10:26 <DIR> ..2013-11-28 10:26 382 .project2013-11-28 10:26 <DIR> src2013-11-28 10:26 213 .buildpath2013-11-28 11:25 <DIR> vokie1232 个⽂件 595 字节4 个⽬录 67,707,273,216 可⽤字节请按任意键继续. . .date格式format⼩记:例如:t = os.date("*t", os.time());for i, v in pairs(t) doprint(i, v);end输出:hour 14min 58wday 2day 10month 8year 2009sec 18yday 222isdst false对于其它的格式字符串,os.date会将⽇期格式化为⼀个字符串例如:print(os.date("today is %A, in %B")) -->today is Tuesday, in Mayprint(os.date("%x", 906000490)) -->09/16/1998所有格式化字符串如下:%a ⼀星期中天数的简写(Wed)%A ⼀星期中天数的全称(Wednesday)%b ⽉份的简写(Sep)%B ⽉份的全称(September)%c ⽇期和时间(09/16/98 23:48:10)%d ⼀个⽉中的第⼏天(16)[0 ~ 31]%H 24⼩时制中的⼩时数(23)[00 ~ 23]%I 12⼩时制中的⼩时数(11)[01 ~ 12]%j ⼀年中的第⼏天(259)[01 ~ 366]%M 分钟数(48)[00 ~ 59]%m ⽉份数(09)[01 ~ 12]%P "上午(am)" 或 "下午(pm)" (pm)%S 秒数(10)[00 ~ 59]%w ⼀星期中的第⼏天(3)[0 ~ 6 = 星期天 ~ 星期六]%W ⼀年中的第⼏个星期 0 ~ 52%x ⽇期(09/16/98)%X 时间(23:48:10)%y 两位数的年份(90)[00 ~ 99]%Y 完整的年份(2009)%% 字符串'%'时间戳转⽇期,⽇期转时间戳的⼏个⼩函数:1function daysDifference(min_timestamp, max_timestamp)2local temp = nil3if max_timestamp < min_timestamp then4 temp = min_timestamp5 min_timestamp = max_timestamp6 max_timestamp = temp7end89local min_days = checkint(min_timestamp / 86400)10local max_days = checkint(max_timestamp / 86400)11return (max_days - min_days)12end1314function timeStampConvertToDate(timestamp)15 date_string = string.format(os.date("%x",timestamp))16local date_table = {}17local t = string.split(date_string, "/")18 date_table.YEAR = checkint(t[3])19 date_table.MONTH = checkint(t[1])20 date_table.DAY = checkint(t[2])21print("YEAR,MONTH,DAY = "..date_table.YEAR..","..date_table.MONTH..","..date_table.DAY) 22return date_table23end242526--date_t 格式要求:27--local date_t = {year=2005, month=11, day=6, hour=22,min=18,sec=30,isdst=false}28--isdst表⽰是否夏令时29function DateConvertToTimeStamp(date_t)30return os.time(date_t)31end。
Lua基础之math(数学函数库)Lua5.1中数学库的所有函数如下表:math.pi 为圆周率常量 = 3.14159265358979323846abs取绝对值math.abs(-15)15acos反余弦函数math.acos(0.5) 1.04719755 asin反正弦函数math.asin(0.5)0.52359877 atan2x / y的反正切值math.atan2(90.0, 45.0) 1.10714871 atan反正切函数math.atan(0.5)0.463647609 ceil不⼩于x的最⼤整数math.ceil(5.8)6cosh双曲线余弦函数math.cosh(0.5) 1.276259652 cos余弦函数math.cos(0.5)0.87758256 deg弧度转⾓度math.deg(math.pi)180exp计算以e为底x次⽅值math.exp(2) 2.718281828 floor不⼤于x的最⼤整数math.floor(5.6)5fmod(mod)取模运算math.mod(14, 5)4frexp把双精度数val分解为数字部分(尾数)和以2为底的指数n,即val=x*2nmath.frexp(10.0)0.625 4 ldexp计算value * 2的n次⽅math.ldexp(10.0, 3)80 = 10 * (2 ^3) log10计算以10为基数的对数math.log10(100)2log计算⼀个数字的⾃然对数math.log(2.71)0.9969max取得参数中最⼤值math.max(2.71, 100, -98,23)100min取得参数中最⼩值math.min(2.71, 100, -98, 23)-98modf把数分为整数和⼩数math.modf(15.98)15 98pow得到x的y次⽅math.pow(2, 5)32rad⾓度转弧度math.rad(180) 3.14159265358random获取随机数math.random(1, 100)math.random(100)获取1-100的随机数randomseed设置随机数种⼦math.randomseed(os.time())在使⽤math.random函数之前必须使⽤此函数设置随机数种⼦sinh双曲线正弦函数math.sinh(0.5)0.5210953sin正弦函数math.sin(math.rad(30))0.5sqrt开平⽅函数math.sqrt(16)4tanh双曲线正切函数math.tanh(0.5)0.46211715tan正切函数math.tan(0.5)0.5463024。
Lua常⽤库⽅法(数学库和table库)⼀.数学库 1.math.abs() 作⽤:取绝对值例⼦:math.abs(-5) 结果:52.math.ceil() 作⽤:向上取整例⼦:math.ceil(3.4) 结果:4 math.ceil(-3.2) 结果:-3 3.math.floor() 作⽤:向下取整例⼦:math.floor(3.4) 结果:3 math.floor(-3.2) 结果:-4 4.math.max() 作⽤:取得参数中最⼤值例⼦:math.max(2.71,100,-98,23) 结果:23 5.math.min() 作⽤:取得参数中最⼩值例⼦:math.min(2.71,100,-98,23) 结果:-98 6.math.randomseed() 作⽤:设置随机数种⼦在使⽤math.random()函数之前必须使⽤此函数设置随机数种⼦ 7.math.random() 作⽤:获取随机数 math.random() 结果:不传⼊参数,返回⼀个 [0,1) 范围内的浮点随即数 math.random(n) 结果:传⼊⼀个参数 n ,返回⼀个 [1,n] 范围内的整数 math.random(n,m) 结果:传⼊两个参数,返回⼀个 [n,m] 范围内的整数 例⼦1: math.randomseed(os.time()) for i=1,10,1 do print(math.random(10)) end 例⼦2: for i=1,10,1 do math.randomseed(os.time()) print(math.random(10)) end 例⼦1得到了正常的随机数,例⼦2得到的是⼀系列相同的数,因为较短的时间内,这种写法的seed可以说是⼀样的(os.time()返回⼀个当前时间戳)⼆.table库 table库是有⼀些辅助函数构成的,这些函数将 table 作为⼀个数组来操作。
把Lua4.0里面的函数总结出来,目的是为了和5.1中的函数进行区分,由于工作中经常使用到4.0中的函数,所以列出来也便于查询和学习标准库_ALERT_ERRORMESSAGEcallcollectgarbage功能:是垃圾收集器的通用接口,用于操作垃圾收集器copytagmethodsdofile (filename)功能:打开并且执行一个lua块,当忽略参数filename时,将执行标准输入设备(stdin)的内容。
返回所有块的返回值。
当发生错误时,dofile将错误反射给调用者注:dofile不能在保护模式下运行dostring功能:执行一个字符串形式的lua块error (message [, level])功能:终止正在执行的函数,并返回message的内容作为错误信息(error函数永远都不会返回)通常情况下,error会附加一些错误位置的信息到message头部.Level参数指示获得错误的位置,Level=1[默认]:为调用error位置(文件+行号)Level=2:指出哪个调用error的函数的函数Level=0:不添加错误位置信息foreachi(table, function(i, v))功能:会期望一个从1(数字1)开始的连续整数范围,遍历table中的key和value逐对进行function(i, v)操作,与lua5.1中的用法相同foreach功能:与foreachi不同的是,foreach会对整个表进行迭代,与lua5.1中的用法相同gcinfogetflobalgettagmethodglobalsnewtagnextprint (...)功能:简单的以tostring方式格式化输出参数的内容rawgetrawgettablerawsettablesetglobalsettagsettagmethodtagtonumber (e [, base])功能:尝试将参数e转换为数字,当不能转换时返回nilbase(2~36)指出参数e当前使用的进制,默认为10进制,如tonumber(11,2)=3 tostirng(e)功能:将参数e转换为字符串,此函数将会触发元表的__tostring事件type(v)功能:返回参数的类型名("nil","number", "string", "boolean", "table", "function", "thread", "userdata")assert(v [, message])功能:相当于C的断言,参数:v:当表达式v为nil或false将触发错误,message:发生错误时返回的信息,默认为"assertion failed!"getn(table)功能:返回table中元素的个数,用法与lua5.1中的table.getn相同sort(table, function)功能:给定的table进行升序排序,用法与lua5.1中的table.sort相同tinsert(table, [pos,] value)功能:向table中插入一个元素,用法与lua5.1中的table.insert相同tremove(table[, pos])功能:删除table中的某一元素,用法与lua5.1中的table.remove相同--------------------------------------------------------输入输出库io库colck功能:返回一个程序使用CPU时间的一个近似值,同lua5.1中使用方法date功能:功能:返回一个按format格式化日期、时间的字串或表,同lua5.1中使用方法execute功能:相当于C的system函数,返回系统状态码,同lua5.1中使用方法exit功能:相当于C的exit函数,终止主程序,code为返回值,同lua5.1中使用方法getenv功能:返回当前进程的环境变量varname的值,若变量没有定义时返回nil,同lua5.1中使用方法功能:删除文件或一个空目录,若函数调用失败则返加nil加错误信息,同lua5.1中使用方法rename功能:更改一个文件或目录名,若函数调用失败则返加nil加错误信息,同lua5.1中使用方法setlocale功能:设置程序的当前设置,函数返回最新的值,失败则返回nil,同lua5.1中使用方法tmpname功能:返回一个临时文件名,同lua5.1中使用方法debug功能:进入交互式的调试模式,解释我们的输入,输入cont回车就退出appendtoopenfile(file, mod)功能:打开一个文件,返回一个文件句柄。
Lua 是一种轻量级的脚本语言,常用于嵌入到其他应用程序中。
Lua 提供了很多内置的库函数,用于进行各种操作。
下面是一些常见的Lua 库函数:1.print(): 用于输出信息到控制台。
2.type(): 返回值的类型。
3.tonumber(): 将字符串转换为数字。
4.tostring(): 将值转换为字符串。
5.len(): 返回字符串的长度。
6.pairs(): 遍历表中的所有键值对。
7.ipairs(): 遍历表中的所有索引和对应的值。
8.next(): 返回下一个表中的键值对。
9.math.abs(): 返回数的绝对值。
10.math.floor(): 返回不大于给定数的最大整数。
11.math.ceil(): 返回不小于给定数的最小整数。
12.math.sqrt(): 返回数的平方根。
13.math.random(): 生成随机数。
14.math.randomseed(): 设置随机数种子。
15.string.find(): 在字符串中查找子串。
16.string.match(): 在字符串中查找匹配的模式。
17.string.gsub(): 在字符串中替换匹配的模式。
18.table.insert(): 在表中插入一个元素。
19.table.remove(): 从表中删除一个元素。
20.table.concat(): 将多个表或数组连接成一个表或数组。
以上只是一部分常见的Lua 库函数,Lua 还提供了很多其他的库函数和模块,可以用于进行各种复杂的操作和处理。
1.math 库函数名描述示例结果pi 圆周率math.pi 3.1415926535898abs 取绝对值math.abs(-2012) 2012ceil 向上取整math.ceil(9.1) 10floor 向下取整math.floor(9.9) 9max 取参数最大值math.max(2,4,6,8) 8min 取参数最小值math.min(2,4,6,8) 2pow 计算x的y次幂math.pow(2,16) 65536sqrt 开平方math.sqrt(65536) 256mod 取模math.mod(65535,2) 1modf 取整数和小数部分math.modf(20.12) 20 0.12randomseed 设随机数种子math.randomseed(os.time())random 取随机数math.random(5,90) 5~90rad 角度转弧度math.rad(180) 3.1415926535898deg 弧度转角度math.deg(math.pi) 180exp e的x次方math.exp(4) 54.598150033144log 计算x的自然对数math.log(54.598150033144) 4log10 计算10为底,x的对数math.log10(1000) 3frexp 将参数拆成x * (2 ^ y)的形式math.frexp(160) 0.625 8ldexp 计算x * (2 ^ y) math.ldexp(0.625,8) 160sin 正弦math.sin(math.rad(30)) 0.5cos 余弦math.cos(math.rad(60)) 0.5tan 正切math.tan(math.rad(45)) 1asin 反正弦math.deg(math.asin(0.5)) 30acos 反余弦math.deg(math.acos(0.5)) 60atan 正切math.deg(math.atan(1)) 452、lua table库table.concat(table, sep, start, end)concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开。
除了table外, 其他的参数都不是必须的, 分隔符的默认值是空字符, start的默认值是1, end的默认值是数组部分的总长.sep, start, end这三个参数是顺序读入的, 所以虽然它们都不是必须参数, 但如果要指定靠后的参数, 必须同时指定前面的参数.> tbl = {"alpha", "beta", "gamma"}> print(table.concat(tbl, ":"))alpha:beta:gamma> print(table.concat(tbl, nil, 1, 2))alphabeta> print(table.concat(tbl, "\n", 2, 3))betagammatable.insert(table, pos, value)table.insert()函数在table的数组部分指定位置(pos)插入值为value的一个元素.pos参数可选, 默认为数组部分末尾.> tbl = {"alpha", "beta", "gamma"}> table.insert(tbl, "delta")> table.insert(tbl, "epsilon")> print(table.concat(tbl, ", ")alpha, beta, gamma, delta, epsilon> table.insert(tbl, 3, "zeta")> print(table.concat(tbl, ", ")alpha, beta, zeta, gamma, delta, epsilontable.maxn(table)table.maxn()函数返回指定table中所有正数key值中最大的key值. 如果不存在key值为正数的元素, 则返回0. 此函数不限于table的数组部分.> tbl = {[1] = "a", [2] = "b", [3] = "c", [26] = "z"}> print(#tbl)3 -- 因为26和之前的数字不连续, 所以不算在数组部分内> print(table.maxn(tbl))26> tbl[91.32] = true> print(table.maxn(tbl))91.32table.remove(table, pos)table.remove()函数删除并返回table数组部分位于pos位置的元素. 其后的元素会被前移. pos参数可选, 默认为table长度, 即从最后一个元素删起. table.sort(table, comp)table.sort()函数对给定的table进行升序排序.> tbl = {"alpha", "beta", "gamma", "delta"}> table.sort(tbl)> print(table.concat(tbl, ", "))alpha, beta, delta, gammacomp是一个可选的参数, 此参数是一个外部函数, 可以用来自定义sort函数的排序标准.此函数应满足以下条件: 接受两个参数(依次为a, b), 并返回一个布尔型的值,当a应该排在b前面时, 返回true, 反之返回false.例如, 当我们需要降序排序时, 可以这样写:> sortFunc = function(a, b) return b < a end> table.sort(tbl, sortFunc)> print(table.concat(tbl, ", "))gamma, delta, beta, alpha用类似的原理还可以写出更加复杂的排序函数. 例如, 有一个table存有工会三名成员的姓名及等级信息:guild = {}table.insert(guild, {name = "Cladhaire",class = "Rogue",level = 70,})table.insert(guild, {name = "Sagart",class = "Priest",level = 70,})table.insert(guild, {name = "Mallaithe",class = "Warlock",level = 40,})对这个table进行排序时, 应用以下的规则: 按等级升序排序, 在等级相同时,按姓名升序排序.可以写出这样的排序函数:function sortLevelNameAsc(a, b)if a.level == b.level thenreturn < elsereturn a.level < b.levelendend测试功能如下:> table.sort(guild, sortLevelNameAsc)> for idx, value in ipairs(guild) do print(idx, ) end1, Mallaithe2, Cladhaire3, Sagarttable.foreachi(table, function(i, v))会期望一个从1(数字1)开始的连续整数范围,遍历table中的key和value逐对进行function(i, v)操作t1 = {2, 4, 6, language="Lua", version="5", 8, 10, 12, web="hello lua"};table.foreachi(t1, function(i, v) print (i, v) end) ; --等价于foreachi(t1, print)输出结果:1 22 43 64 85 106 12table.foreach(table, function(i, v))与foreachi不同的是,foreach会对整个表进行迭代t1 = {2, 4, 6, language="Lua", version="5", 8, 10, 12, web="hello lua"};table.foreach(t1, function(i, v) print (i, v) end) ;输出结果:1 22 43 64 85 106 12web hello lualanguage Luaversion 5table.getn(table)返回table中元素的个数t1 = {1, 2, 3, 5};print(getn(t1))->4table.setn(table, nSize)设置table中的元素个数table.nums(table)table中键值对的个数3.Lua String库函数描述示例结果len 计算字符串长度string.len("abcd") 4rep 返回字符串s的n个拷贝string.rep("abcd",2) abcdabcd lower 返回字符串全部字母大写string.lower("AbcD") abcdupper 返回字符串全部字母小写string.upper("AbcD") ABCD format 返回一个类似printf的格式化字符串string.format("the value is:%d",4) the value is:4 sub returns substring from index i to j of sstring.sub("abcd",2) bcdstring.sub("abcd",-2) cdstring.sub("abcd",2,-2) bcstring.sub("abcd",2,3) bcfind 在字符串中查找string.find("cdcdcdcd","ab") nilstring.find("cdcdcdcd","cd") 1 2string.find("cdcdcdcd","cd",7) 7 8gsub 在字符串中替换string.gsub("abcdabcd","a","z"); zbcdzbcd 2string.gsub("aaaa","a","z",3); zzza 3byte 返回字符的整数形式string.byte("ABCD",4) 68char 将整型数字转成字符并连接string.char(97,98,99,100) abcd【基本模式串】字符类描述示例结果. 任意字符string.find("",".") nil%s 空白符string.find("ab cd","%s%s") 3 4%S 非空白符string.find("ab cd","%S%S") 1 2%p 标点字符string.find("ab,.cd","%p%p") 3 4%P 非标点字符string.find("ab,.cd","%P%P") 1 2%c 控制字符string.find("abcd\t\n","%c%c") 5 6%C 非控制字符string.find("\t\nabcd","%C%C") 3 4%d 数字string.find("abcd12","%d%d") 5 6%D 非数字string.find("12abcd","%D%D") 3 4%x 十六进制数字string.find("efgh","%x%x") 1 2%X 非十六进制数字string.find("efgh","%X%X") 3 4%a 字母string.find("AB12","%a%a") 1 2%A 非字母string.find("AB12","%A%A") 3 4%l 小写字母string.find("ABab","%l%l") 3 4%L 大写字母string.find("ABab","%L%L") 1 2%u 大写字母string.find("ABab","%u%u") 1 2%U 非大写字母string.find("ABab","%U%U") 3 4%w 字母和数字string.find("a1()","%w%w") 1 2%W 非字母非数字string.find("a1()","%W%W") 3 4--------------------------------------------------------------------------------------------------【转义字符%】字符类描述示例结果% 转义字符string.find("abc%..","%%") 4 4string.find("abc..d","%.%.") 4 5--------------------------------------------------------------------------------------------------【用[]创建字符集,"-"为连字符,"^"表示字符集的补集】字符类描述示例结果[01] 匹配二进制数string.find("32123","[01]") 3 3 [AB][CD] 匹配AC、AD、BC、BD string.find("ABCDEF","[AB][CD]") 2 3 [[]] 匹配一对方括号[] string.find("ABC[]D","[[]]") 4 5[1-3] 匹配数字1-3 string.find("312","[1-3][1-3][1-3]") 1 3[b-d] 匹配字母b-d string.find("dbc","[b-d][b-d][b-d]") 1 3 [^%s] 匹配任意非空字符string.find(" a ","[^%s]") 3 3 [^%d] 匹配任意非数字字符string.find("123a","[^%d]") 4 4 [^%a] 匹配任意非字母字符string.find("abc1","[^%a]") 4 4--------------------------------------------------------------------------------------------------【用"()"进行捕获】字符类描述示例结果() 捕获字符串string.find("12ab","(%a%a)") 3 4 abstring.find("ab12","(%d%d)") 3 4 12 --------------------------------------------------------------------------------------------------【模式修饰符】修饰符描述示例结果+ 表示1个或多个,匹配最多个string.find("aaabbb","(a+b)") 1 4 aaabstring.find("cccbbb","(a+b)") nil- 表示0个或多个,匹配最少个string.find("zzxyyy","(xy-)") 3 3 xstring.find("zzzyyy","(x-y)") 4 4 y* 表示0个或多个,匹配最多个string.find("mmmnnn","(m*n)") 1 4 mmmbstring.find("lllnnn","(m*n)") 4 4 n? 表示0个或1个string.find("aaabbb","(a?b)") 3 4 abstring.find("cccbbb","(a?b)") 4 4 b。