LUA各种库
LUAstring库详解
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中的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)返回去除第⼀个和最后⼀个字符后的⼦串。
lua5.2中的base库
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 sqlite cursor 中文列名 使用方法
lua sqlite cursor 中文列名使用方法Lua SQLite库提供了一种方便的方法来操作SQLite数据库,其中包括了对游标的支持。
游标是一种用于遍历数据库表中的数据的对象。
在SQLite中,游标可以用于检索和处理表中的数据。
一、游标概述Lua SQLite库中的游标允许您在表中检索数据,并对数据进行各种操作。
游标提供了一种迭代数据集的方式,可以在遍历数据时执行各种命令和操作。
二、使用游标检索数据要使用Lua SQLite库中的游标检索数据,您需要先打开一个数据库连接,然后创建一个游标对象。
接下来,您可以使用`SELECT`语句从表中检索数据,并将结果绑定到游标的变量中。
以下是一个简单的示例代码,演示了如何使用游标检索数据:```lua-- 打开数据库连接local db, err = sqlite.open("example.db")if db == nil thenprint("无法打开数据库: " .. err)returnend-- 创建游标对象local cursor, err = db:cursor("my_table")if cursor == nil thenprint("创建游标失败: " .. err)db:close()returnend-- 使用SELECT语句检索数据local rows, err = cursor:execute("SELECT * FROM my_table") if rows == nil thenprint("检索数据失败: " .. err)cursor:close()db:close()returnend-- 遍历数据并处理结果for row in rows dolocal column1 = row["column1"] -- 使用中文列名获取数据 local column2 = row["列二"] -- 可以使用其他中文列名获取数据-- 对获取的数据进行操作或输出print("列一值: " .. column1)print("列二值: " .. column2)end-- 关闭游标和数据库连接cursor:close()db:close()```在上面的示例中,我们首先打开了一个数据库连接,并创建了一个游标对象。
lua扩展库V1.4
lua扩展库V1.4目录扩展库 (2)1. bit (2)2. cpu (6)3. i2c (7)4. pack (9)5. pio (11)6. pmd (14)7. rtos (16)8. uart (21)9. adc (24)10. iconv (25)11. audiocore (26)12. apn (29)扩展库1.bit位操作库Functionsbit.bit bit.isset bit.isclear bit.set bit.clear bit.bnot bit.band bit.bor bit.bxor bit.lshift bit.rshift bit.arshiftnumber = bit.bit( position )Generate a number with a 1 bit (used for mask generation). Equivalent to 1 << position in C.Arguments: position - position of the bit that will be set to 1.Returns: number - a number with only one 1 bit at position (the rest are set to 0).flag = bit.isset( value, position )Test if a given bit is set.Arguments:∙value - the value to test.∙position - bit position to test.Returns: boolean - true if the bit at the given position is 1, false otherwise.flag = bit.isclear( value, position )Test if a given bit is cleared.Arguments:∙value - the value to test.∙position - bit position to test.Returns: boolean - true if the bit at the given position is 0, false othewise. number = bit.set( value, pos1, pos2, ..., posn )Set bits in a number.Arguments:∙value - the base number.∙pos1 - position of the first bit to set.∙pos2 - position of the second bit to set.∙posn - position of the nth bit to set.Returns: number - the number with the bit(s) set in the given position(s). number = bit.clear( value, pos1, pos2, ..., posn ) Clear bits in a number.Arguments:∙value - the base number.∙pos1 - position of the first bit to clear.∙pos2 - position of the second bit to clear.∙posn - position of thet nth bit to clear.Returns: number - the number with the bit(s) cleared in the given position(s). number = bit.bnot( value )Bitwise negation, equivalent to ~value in C.Arguments: value - the number to negate.Returns: number - the bitwise negated value of the number.number = bit.band( val1, val2, ... valn )Bitwise AND, equivalent to val1 & val2 & ... & valn in C.Arguments:∙val1 - first AND argument.∙val2 - second AND argument.∙valn - nth AND argument.Returns: number - the bitwise AND of all the arguments.number = bit.bor( val1, val2, ... valn )Bitwise OR, equivalent to val1 | val2 | ... | valn in C.Arguments:∙val1 - first OR argument.∙val2 - second OR argument.∙valn - nth OR argument.Returns: number - the bitwise OR of all the arguments. number = bit.bxor( val1, val2, ... valn )Bitwise exclusive OR (XOR), equivalent to val1 ^ val2 ^ ... ^ valn in C. Arguments:∙val1 - first XOR argument.∙val2 - second XOR argument.∙valn - nth XOR argument.Returns: number - the bitwise exclusive OR of all the arguments. number = bit.lshift( value, shift )Left-shift a number, equivalent to value < shift in C.Arguments:∙value - the value to shift.∙shift - positions to shift.Returns: number - the number shifted leftnumber = bit.rshift( value, shift )Logical right shift a number, equivalent to ( unsigned )value >> shift in C. Arguments:∙value - the value to shift.∙shift - positions to shift.Returns: number - the number shifted right (logically).number = bit.arshift( value, shift )Arithmetic right shift a number equivalent to value >> shift in C. Arguments:∙value - the value to shift.∙shift - positions to shift.Returns: number - the number shifted right (arithmetically).2.cpu包含cpu中断id定义Data structures, constants and typescpu.INT_GPIO_POSEDGEcpu.INT_GPIO_NEGEDGE中断id:INT_GPIO_POSEDGE GPIO上升沿中断INT_GPIO_NEGEDGE GPIO下降沿中断FunctionsNull3.i2ci2c操作接口Functionsi2c.setup i2c.write i2c.readspeed = i2c.setup( id, speed, slave )打开I2C接口Arguments:∙id - i2c接口id,目前支持i2c id=1即模块的I2C2∙speed - i2c.FAST (400KHz), i2c.SLOW (100KHz)∙slave - i2c外设地址0x00-0x7fReturns: 可以根据返回的频率值判断是否成功打开i2c wrote = i2c.write( id, reg, data )往指定的寄存器地址reg传输数据Arguments:∙id - i2c接口id∙reg - 写入i2c从设备的寄存器起始地址∙data - number / string / table,自动根据参数类型写数据,num只写1个字节,string/table 自动根据输入的长度传输相应字节Returns: 传输成功的字节数data = i2c.read( id, reg, num )读取指定寄存器地址reg的数据内容Arguments:∙id - i2c接口id∙reg - 读取i2c从设备的寄存器起始地址∙num - 读取数据字节数Returns: 返回读取的数据,二进制数据会包含非可见字符,请使用string.byte打印数据流speed = i2c.close( id )关闭I2C接口Arguments:∙id - i2c接口id,目前支持i2c id=1即模块的I2C2Returns: nothing4.packpack库支持将一系列数据按照格式字符转化为lua字符串或者将lua字符串按照格式字符转化成一系列值∙endianness is an optional endian flags that specifies how the numbers that are to be packed/unpacked are stored in memory. It can be either:1.'<' for little endian.2.'>' for big endian.3.'=' for native endian (the platform's endian order, default).∙format specifier describes what kind of variable will be packed/unpacked. The format specifier is case-sensitive. The possible values of this parameter are summarized in the table below:∙count is an optional counter for the format specifier. For example, i5 instructs the code to pack/unpack 5 integer variables, as opposed to i that specifies a single integer variable. Functionspack.pack pack.unpackpacked = pack.pack( format, val1, val2, ..., valn )Packs variables in a string.Arguments:∙∙val1 - first variable to pack.∙val2 - second variable to pack.∙valn - nth variable to pack.Returns: packed - a string containing the packed representation of all variables according to the format.nextpos, val1, val2, ..., valn = pack.unpack( string, format, [ init ] )Unpacks a stringArguments:∙string - the string to unpack.∙∙init - (optional) marks where in string the unpacking should start (1 if not specified).Returns:∙nextpos - the position in the string after unpacking.∙val1 - the first unpacked value.∙val2 - the second unpacked value.∙valn - the nth unpacked value.5.piopio.P0_0 - pio.P0_31表示GPIO_0 - GPIO_31pio.P1_0 - pio.P1_9表示GPO_0 - GPO_9GPIO工作方式有三种,通过pio.pin.setdir设置: pio.INPUT pio.OUTPUT pio.INTpio.INT中断方式来中断时通过rtos.MSG_INT消息通知,可以根据消息数据域来判断中断id与中断的pin脚:id - 中断idresnum - 中断pinFunctionspio.pin.setdir pio.pin.setval pio.pin.getval pio.pin.sethigh pio.pin.setlow pio.decodepio.pin.setdir( direction, pin1, pin2, ..., pinn )Set pin(s) directionArguments:∙direction - the pin direction, can be either pio.INPUT or pio.OUTPUT or pio.INT∙pin1 - the first pin∙pin2 (optional) - the second pin∙pinn (optional) - the n-th pinReturns: nothing.pio.pin.setval( value, pin1, pin2, ..., pinn )Set pin(s) valueArguments:∙value - pin value, can be either 0 or 1∙pin1 - the first pin∙pin2 (optional) - the second pin∙pinn (optional) - the n-th pinReturns: nothing.val1, val2, ..., valn = pio.pin.getval( pin1, pin2, ..., pinn ) Get value of pin(s)Arguments:∙pin1 - the first pin∙pin2 (optional) - the second pin∙pinn (optional) - the n-th pinReturns: The value(s) of the pin(s), either 0 or 1pio.pin.sethigh( pin1, pin2, ..., pinn )Set pin(s) to 1 (high)Arguments:∙pin1 - the first pin∙pin2 (optional) - the second pin∙pinn (optional) - the n-th pinReturns: nothing.pio.pin.setlow( pin1, pin2, ..., pinn )Set pin(s) to 0 (low)Arguments:∙pin1 - the first pin∙pin2 (optional) - the second pin∙pinn (optional) - the n-th pinReturns: nothing.port, pin = pio.decode( resnum )Convert a PIO resource number to the corresponding port and pin. This is most commonly used in GPIO edge interrupt routines to convert the Lua interrupt routine's argument to the port and pin that caused the interrupt but it can also be used on the values returned by the pin names pio.PA_0, pio.P2_15 and so on.Arguments: resnum - the resource number of the pinReturns:∙port - the index of the port, starting from 0 (so port A is 0, port B is 1 and so on)∙pin - the pin number, usually from 0 to 316.pmd电源管理接口:ldo控制,省电管理Data structures, constants and typespmd.LDO_KEYPADpmd.LDO_LCD--控制LED0-LED4pmd.KP_LEDRpmd.KP_LEDGpmd.KP_LEDBpmd.LDO_VIBpmd.LDO_VLCD--控制POWER_VLCDpmd.LDO_VASW -- V_ASWpmd.LDO_VMMC -- V_MMCldo id值Functionspmd.init pmd.ldoset pmd.sleepresult = pmd.init( param )设置电源管理参数电池充电控制,3阶段电流充电:一阶段:电压低于battlevelFirst 充电电流为currentFirst二阶段:电压高于battlevelFirst 低于battlevelSecond 充电电流为currentSecond三阶段:电压高于battlevelSecond至充满 4.25v 充电电流为currentThirdArguments:∙param - 参数表,电流有效值:50,100,150,200,300,400,500,600,700,800 电压值以mV为单位∙param.currentFirst - 电池电压小于一阶段电压值时的充电电流∙param.battlevelFirst - 一阶段电压值节点∙param.currentSecond - 电池电压大于一阶段电压值小于二阶段电压值时的充电电流∙param.battlevelSecond - 二阶段电压值节点∙param.currentThird - 电池电压大于二阶段电压值时的充电电流Returns: result - 1:成功0:失败pmd.ldoset( level, id1, [id2], ..., [idn] )ldo控制Arguments:∙level - ldo亮度0 - 7级0级关闭∙id1 - 要设置的第一个ldo∙id2 (optional) - 要设置的第2个ldo∙idn (optional) - 要设置的第n个ldoReturns: nothing.pmd.sleep( value )省电控制Arguments: value - 1 - 进入睡眠,0 - 退出睡眠Returns: nothing.7.rtos嵌入式系统接口:接收消息,软件定时器Functionsrtos.init_module rtos.receive rtos.timer_start rtos.timer_stop rtos.poweron_reason rtos.poweron rtos.poweroff rtos.restart rtos.tick rtos.sleepPercentage=rtos.get_env_usagertos.init_module(module, [param1], ..., [paramn] )初始化模块Arguments:module - 按键功能rtos.MOD_KEYPAD,按键功能参数表:rtos.init_module(rtos.MOD_KEYPAD, type, [inmask, outmask])type: 键盘类型目前只有矩阵键盘(type = 0)inmask outmask: 矩阵键盘有效行列标记比如某矩阵键盘由keyin0 keyin3 keyout1 keyout4组成,inmask=1<0|1<3=0x09 outmask = 1<1|1<4=0x12Returns: nothing.msg,msgpara = rtos.receive(timeout)接收消息Arguments: timeout - timeout 超时返回以毫秒为单位,可以用#rtos.INF_TIMEOUT#表示阻塞等待消息Returns:如果msg为table类型,msg根据不同的消息msg.id会有不同的数据:如果msg为number类型,msg根据不同的消息msg会有不同的数据1.rtos.MSG_TIMER定时器超时消息msg.timer_id 或者msgpara为超时的定时器id2.rtos.MSG_UART_RXDATA串口ATC数据提醒msg.uart_id 或者msgpara为收到的数据的串口id或者atc,收到该消息后可以通过uart.read 接口读取数据3.rtos.MSG_KEYPAD键盘消息,必须初始化按键(#rtos.init_module#)后才会有键盘消息msg.pressed 按键按下/弹起msg.key_matrix_row 按键所在行值msg.key_matrix_col 按键所在列值4.rtos.WAIT_MSG_TIMEOUT等待消息超时5.rtos.MSG_INT中断消息msg.int_id 中断idmsg.int_resnum 中断pin脚编号6.rtos.MSG_PMD电源管理消息msg.present 电池在位状态msg.level 百分比0-100msg.voltage 电池电压msg.charger 充电器在位状态msg.state 充电状态:0-不在充电1-充电中2-充电停止rtos.timer_start( timer_id, timeout )启动定时器Arguments:∙timer_id - 定时器id,可以是任意整数,定时器到时msg.timer_id值为启动时定时器∙timeout - 定时器延时时间以毫秒为单位Returns: nothing.rtos.timer_stop(timer_id)停止定时器Arguments: timer_id - 输入与启动定时器时定义的id即可停止定时器Returns: nothing.reason=rtos.poweronreason()读取开机原因值Arguments: nothingReturns: 开机原因值,取值范围如下:rtos. POWERON_KEY:按键开机rtos. POWERON_CHARGER:充电开机rtos. POWERON_ALARM:闹钟开机rtos. POWERON_RESTART:软件重启开机rtos. POWERON_EXCEPTION:异常开机rtos. POWERON_HOST:HOST工具控制重启开机rtos. POWERON_WATCHDOG:软件看门狗开机rtos.poweron( flag )是否启动GSM开机Arguments:flag- 0表示不启动系统;1表示启动系统Returns: nothing.rtos.poweroff()软件关机Arguments: nothingReturns: nothing.rtos.restart()软件重启Arguments: nothingReturns: nothing.ticks=rtos.tick()获取系统开机运行时间总计数Arguments: nothingReturns: ticks,时间计数,每tick时长:Air200或Air202是1/16384秒,Air810是4.615毫秒。
lua库函数
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 还提供了很多其他的库函数和模块,可以用于进行各种复杂的操作和处理。
Lua的table库函数insert、remove、concat、sort详细介绍
Lua的table库函数insert、remove、concat、sort详细介绍函数列表:table.insert(table,[ pos,] value)table.remove(table[, pos])table.concat(table[, sep[, i[, j]]])table.sort(table[, comp])1. insert 和 remove 只能⽤于数组元素的插⼊和移出,进⾏插⼊和移出时,会将后⾯的元素对齐起来。
所以在 for 循环中进⾏ insert 和 remove 的时候要注意插⼊和移除时是否漏掉了某些项:复制代码代码如下:local t = {1,2,3,3,5,3,6}for i,v in ipairs(t) doif v == 3 thentable.remove(t,i)endend-- 错误,第四个 3 没有被移除,ipairs 内部会维护⼀个变量记录遍历的位置,remove 掉第三个数字 3 之后,ipairs 下⼀个返回的值是 5 ⽽不是 3local t = {1,2,3,3,5,3,6}for i=1, #t doif t[i] == 3 thentable.remove(t,i)i = i-1endend-- 错误,i=i-1 这段代码没有⽤,i 的值始终是从 1 到 #t,for 循环⾥修改 i 的值不起作⽤local t = {1,2,3,3,5,3,6}for i=#t, 1, -1 doif t[i] == 3 thentable.remove(t,i)endend-- 正确,从后往前遍历local t = {1,2,3,3,5,3,6}local i = 1while t[i] doif t[i] == 3 thentable.remove(t,i)elsei = i+1endend-- 正确,⾃⼰控制 i 的值是否增加2. concat 可以将 table 的数组部分拼接成⼀个字符串,中间⽤ seq 分隔。
Lua字符串库(string库)学习笔记 电脑资料
Lua字符串库(string库)学习笔记电脑资料这篇文章主要介绍了Lua字符串库(string库)学习笔记,本文列举了一些常用的Lua字符串库函数,如byte、char、dump、find等,需要的朋友可以参考下Lua 最强大的特性之一就是它的字符串处理能力,它支持字符格式化输出,具有可扩展的模式匹配查找功能,以及一些实用的字符操作,例如查询、截取、替换和删除等字符串操作,这些字符串操作函数都封装在一个名为 string 的模块里,Lua 里的字符索引是从 1 开始,索引值也可以是负数,这种情况将被解释成向后索引,从字符串末尾开始算起。
下面是 Lua 5.2 提供的字符串操作函数:函数 string.byte 把字符串里的第 i 个字符转为 ASCII 编码,默认是输出第一个字符的编码(只有一个参数的话),用法:代码如下:string.byte (s [, i [, j]])例子:代码如下:print(string.byte("abc")) //echo:97print(string.byte("abc", 2))//echo:98函数 string.char 是把一个 ASCII 编码转换为对应的字符,用法:代码如下:string.char (asc1, ...)例子:代码如下:print(string.char(97)) //echo aprint(string.char(99, 100, 101)) //echo cde函数 string.dump 返回一个函数二进制形式的字符串,用法:代码如下:string.dump (function)参数 function 是一个 Lua 函数:代码如下:function test()print("just a test")endprint(string.dump(test))函数 string.dump 实现了函数的序列化,函数可以很轻松的传递,并在其他作用域调用。
lua菜鸟教程
lua菜鸟教程Lua 是一种轻量级的脚本语言,常用于嵌入到其他应用程序中,添加自定义的功能和扩展性。
下面是一些 Lua 的基本概念和语法:1. 数据类型:- nil:表示空值。
- boolean: 布尔类型,只有 true 和 false 两个取值。
- number: 表示实数,Lua 不区分整数和浮点数。
- string: 字符串类型,用双引号或单引号包裹起来。
- function: 函数类型,可以被赋值给变量和作为参数传递。
- userdata: 表示一种用户自定义的数据类型。
- thread: 表示独立执行的线程。
- table: 表示关联数组,是 Lua 中唯一的数据结构。
2. 基本语法:- 注释: 使用双连字符 "--" 开头,可以单行注释,也可以在行末添加注释。
- 变量: 用于存储不同类型的数据。
- 运算符: 包括算术运算符、关系运算符、逻辑运算符等。
- 条件语句: 包括 if 语句和 switch 语句。
- 循环语句: 包括 while 循环、repeat...until 循环和 for 循环。
- 函数: 使用 function 关键字定义函数,并通过函数名调用。
- 模块: 用于组织代码,提供代码的复用性和封装性。
- 文件操作: 包括读取文件内容、写入文件内容等操作。
3. 标准库:- io 库: 用于文件操作。
- string 库: 用于处理字符串。
- math 库: 提供数学函数。
- table 库: 用于操作 Lua 中的表。
- os 库: 提供与操作系统相关的功能。
通过学习这些基本知识,可以开始编写简单的 Lua 程序。
希望这些内容能够帮助你入门 Lua 编程!。
Lua中os库的使用(execute,date,clock,time)
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常用库方法(数学库和table库)
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 作为⼀个数组来操作。
lual_newlib用法(二)
lual_newlib用法(二)lual_newlib用法lual_newlib是Lua语言中的一个重要库,用于创建新的Lua标准库。
下面是lual_newlib的一些常用用法:创建新的标准库使用lual_newlib可以自定义一个新的Lua标准库。
你可以基于现有的标准库进行修改或者完全自定义一个全新的库。
导出函数通过lual_newlib,你可以导出自己编写的函数供Lua脚本调用。
导出的函数可以包含不同的参数和返回值。
导出常量除了导出函数,你还可以导出常量供Lua脚本使用。
这样可以方便地在C代码和Lua脚本之间进行数据交互。
注册到Lua虚拟机使用lual_newlib创建的新库需要注册到Lua虚拟机中才能被使用。
注册后,可以在Lua脚本中使用新库提供的函数和常量。
使用示例下面是一个使用lual_newlib创建新库的示例:#include <>#include <>#include <>static int my_function(lua_State* L) {// 在这里编写函数的实现逻辑return 0; // 返回值的数量}static const luaL_Reg mylib[] = {{"my_function", my_function}, // 注册函数{"MY_CONSTANT", 5}, // 注册常量{NULL, NULL} // 结束标记};int luaopen_mylib(lua_State* L) {luaL_newlib(L, mylib); // 创建新库return 1; // 返回库的数量}在上述示例代码中,我们定义了一个名为my_function的函数和一个名为MY_CONSTANT的常量,并将它们注册到了新库mylib中。
然后我们通过luaL_newlib函数将新库注册到了Lua虚拟机中。
Lua中的一些常用函数库实例讲解
Lua中 的 一 些 常 用 函 数 库 实 例 讲 解
前言
这篇文章将会来一些比较轻松的内容,就是简单的介绍一下Lua中几个常用的库。简单的说就是几个API的介绍。所以说,看 起来比较容易,也没有多大的分量。就是纯粹的总结。使用库就是为了方便我们的开发,提高开发效率,同时也能保证代码的 质量。希望大家以后也不要重复造轮子了。
table库
table库是由一些辅助函数构成的,这些函数将table作为数组来操作(重点:作为数组来操作的)。
插入和删除函数
table.insert用于将一个元素插入到一个数组的指定位置,它会移动后续元素以空出空间。如果在调用table.insert时没有指定位 置参数,则会将元素添加到数组末尾。示例代码:
谨记:三角函数的参数都是弧度,在实际使用中不要忘了,是弧度。
取整函数(floor,ceil)
floor:返回不大于x的最大整数;向下取整; ceil:返回不小于x的最大整数;向上取整。示例代码:
复制代码 代码如下:
print(math.floor(5.6)) -- 5 print(math.ceil(5.6)) -- 6
这里重点介绍一下string.sub(s, i, j)函数,它可以从字符串s中提取第i个到第j个字符。在Lua中,字符串的第一个字符的索引是 1,但是,索引也可以是负数,表示从字符串的尾部开始计数,索引-1代表字符串的最后一个字符,以此类推。 复制代码 代码如下:
local str = "[Jelly Think]" local newStr = string.sub(str, 2, -2) print(newStr) -- Jelly Think newStr = string.sub(str, 2, 6) print(newStr) -- Jelly
lua4.0函数库
把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字符串库(整理)⼩集1. 基础字符串函数:字符串库中有⼀些函数⾮常简单,如:1). string.len(s) 返回字符串s的长度;2). string.rep(s,n) 返回字符串s重复n次的结果;3). string.lower(s) 返回s的副本,其中所有的⼤写都被转换为了⼩写形式,其他字符不变;4). string.upper(s) 和lower相反,将⼩写转换为⼤写;5). string.sub(s,i,j) 提取字符串s的第i个到第j个字符。
Lua中,第⼀个字符的索引值为1,最后⼀个为-1,以此类推,如:print(string.sub("[hello world]",2,-2)) --输出hello world6). string.format(s,...) 返回格式化后的字符串,其格式化规则等同于C语⾔中printf函数,如:print(string.format("pi = %.4f",math.pi)) --输出pi = 3.14167). string.char(...) 参数为0到多个整数,并将每个整数转换为对应的字符。
然后返回⼀个由这些字符连接⽽成的字符串,如:print(string.char(97,98,99)) --输出abc8). string.byte(s,i) 返回字符串s的第i个字符的Ascii值,如果没有第⼆个参数,缺省返回第⼀个字符的Ascii值。
print(string.byte("abc")) --输出97print(string.byte("abc",-1)) --输出99由于字符串类型的变量都是不可变类型的变量,因此在所有和string相关的函数中,都⽆法改变参数中的字符串值,⽽是⽣成⼀个新值返回。
2. 模式匹配函数:Lua的字符串库提供了⼀组强⼤的模式匹配函数,如find、match、gsub和gmatch。
Lua脚本语言概述
Lua脚本语⾔概述Lua是什么Lua是⼀中嵌⼊式的脚本语⾔。
Lua语⾔可以独⽴进⾏编程,但这不是其主要的使⽤⽅式。
Lua虽然有动态、灵活的语法提供强⼤的功能,但并不像 Java、Python 等⼀样有⼀个完善的库(但仍存在⼀定数量的第三⽅库),这不是缺陷,⽽是和其定位有关。
Lua最典型的⽤法,是作为⼀个库,嵌⼊到其他⼤型语⾔(称之为宿主语⾔)的应⽤程序之中,为应⽤程序提供参数配置或逻辑描述等功能,带来前所未有的灵活性。
Lua常见的宿主语⾔有:C/C++,Java,.NET,甚⾄脚本语⾔如PHP,Ruby等。
Lua与宿主语⾔的交互⽅式:宿主语⾔通过虚拟机调⽤Lua脚本中的变量和函数;Lua调⽤宿主语⾔中的变量和函数。
Lua语⾔的特性-----就是8⼤数据类型1.动态语⾔,可控的垃圾收集,⽀持数值、字符串、布尔、nil简单类型的基本运算2.以哈希表为基础,以原型的⽅式,构建复杂的数据结构,和⽀持⾯向对象3.⽀持宿主语⾔中⾃定义的数据类型的操作4.将函数作为普通数据类型,⽀持词法定界、尾递归5.通过协程的⽅式⽀持并发程序设计Lua的使⽤范围lua除了编写魔兽世界的插件,还能做什么?可以⽤lua来写⼀些常⽤的程序,⽐如操作excel,⽐如定制⼀些查找。
还可以把lua作为⼀种配置⽅式(类似ini⽂件或者cfg⽂件),因为 lua的表,可以达到⾮常复杂的配置功能,另外lua的解析速度要⽐xml快多了。
当然lua主要⽤处还是作为游戏的脚本⽀持语⾔。
Lua的基本内容⼋种数据类型:nil,booleans,numbers,strings,table(表),functions(函数),userdata,threads(协程)1.数值(number):内部以double表⽰=====》算术运算符(+,-,*,/,^(幂),%),关系运算符(>,<,<=,>=,==,~=)====》数学库2.字符串(string):总是以零结尾,但可以包含任意字符(包括零),因此并不等价于C字符串,⽽是超集===》连接运算符====》string库3.布尔(boolean):只有true,false两个值------>逻辑运算符(and,or,not)。
luaprofiler使用
luaprofiler使用luaprofiler是一种用于性能分析的Lua库,它可以帮助开发者识别和解决应用程序中的性能问题。
本文将介绍如何使用luaprofiler进行性能分析,帮助开发者提高应用程序的性能。
我们需要在应用程序中集成luaprofiler库。
在Lua中,可以使用require函数加载luaprofiler库,并调用start函数开始性能分析,如下所示:```local profiler = require("luaprofiler")profiler.start()```在性能分析期间,luaprofiler会记录函数的执行时间、调用次数等信息。
为了准确度量性能,我们可以在关键代码段前后插入一些标记,这样可以更精确地监测这部分代码的性能。
下面是一个示例代码:```-- 在关键代码段前插入标记profiler.mark("start key code")-- 关键代码段-- ...-- 在关键代码段后插入标记profiler.mark("end key code")```通过以上方式,我们可以在性能分析报告中准确地看到关键代码段的性能情况。
当应用程序运行完成后,我们可以调用stop函数停止性能分析,并生成性能分析报告。
性能分析报告中包含了函数的执行时间、调用次数、平均执行时间等信息。
```profiler.stop()profiler.report("profile.txt")```上述代码会将性能分析报告保存到一个名为"profile.txt"的文件中。
在性能分析报告中,每个函数都会有一个对应的条目,其中包含了该函数的执行时间、调用次数、平均执行时间等信息。
通过分析这些信息,我们可以找出性能瓶颈所在,进而优化代码。
除了生成性能分析报告,luaprofiler还提供了一些其他功能,例如函数调用图和热点函数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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)隔开。
除了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)输出结果:12243648510612table.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);输出结果:12243648510612web hello lualanguage Luaversion5table.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")abcd upper返回字符串全部字母小写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")12string.find("cdcdcdcd","cd",7)78gsub在字符串中替换string.gsub("abcdabcd","a","z");zbcdzbcd2string.gsub("aaaa","a","z",3);zzza3byte返回字符的整数形式string.byte("ABCD",4)68char将整型数字转成字符并连接string.char(97,98,99,100)abcd【基本模式串】字符类描述示例结果.任意字符string.find("",".")nil%s空白符string.find("ab cd","%s%s")34%S非空白符string.find("ab cd","%S%S")12%p标点字符string.find("ab,.cd","%p%p")34%P非标点字符string.find("ab,.cd","%P%P")12%c控制字符string.find("abcd\t\n","%c%c")56%C非控制字符string.find("\t\nabcd","%C%C")34%d数字string.find("abcd12","%d%d")56%D非数字string.find("12abcd","%D%D")34%x十六进制数字string.find("efgh","%x%x")12%X非十六进制数字string.find("efgh","%X%X")34%a字母string.find("AB12","%a%a")12%A非字母string.find("AB12","%A%A")34%l小写字母string.find("ABab","%l%l")34%L大写字母string.find("ABab","%L%L")12%u大写字母string.find("ABab","%u%u")12%U非大写字母string.find("ABab","%U%U")34%w字母和数字string.find("a1()","%w%w")12%W非字母非数字string.find("a1()","%W%W")34--------------------------------------------------------------------------------------------------【转义字符%】字符类描述示例结果%转义字符string.find("abc%..","%%")44string.find("abc..d","%.%.")45--------------------------------------------------------------------------------------------------【用[]创建字符集,"-"为连字符,"^"表示字符集的补集】字符类描述示例结果[01]匹配二进制数string.find("32123","[01]")33 [AB][CD]匹配AC、AD、BC、BD string.find("ABCDEF","[AB][CD]")23 [[]]匹配一对方括号[]string.find("ABC[]D","[[]]")45 [1-3]匹配数字1-3string.find("312","[1-3][1-3][1-3]")13 [b-d]匹配字母b-d string.find("dbc","[b-d][b-d][b-d]")13 [^%s]匹配任意非空字符string.find("a","[^%s]")33 [^%d]匹配任意非数字字符string.find("123a","[^%d]")44 [^%a]匹配任意非字母字符string.find("abc1","[^%a]")44--------------------------------------------------------------------------------------------------【用"()"进行捕获】字符类描述示例结果()捕获字符串string.find("12ab","(%a%a)")34abstring.find("ab12","(%d%d)")3412 --------------------------------------------------------------------------------------------------【模式修饰符】修饰符描述示例结果+表示1个或多个,匹配最多个string.find("aaabbb","(a+b)")14aaabstring.find("cccbbb","(a+b)")nil-表示0个或多个,匹配最少个string.find("zzxyyy","(xy-)")33xstring.find("zzzyyy","(x-y)")44y*表示0个或多个,匹配最多个string.find("mmmnnn","(m*n)")14mmmbstring.find("lllnnn","(m*n)")44n 表示0个或1个string.find("aaabbb","(a?b)")34abstring.find("cccbbb","(a?b)")44b。