摘要:
捕获捕获是这样一种机制:可以使用模式串的一部分匹配目标串的一部分。将你想捕获的模式用圆括号括起来,就指定了一个捕获。在string.find使用捕获的时候,函数会返回捕获的值作为额外的结果。这常被用来将一个目标串拆分成多个:pair = "name = Anna"_, _, key, value = string.find(pair, "(%a+)%s*=%s*(%a+)")print(key, value) --> name Anna'%a+' 表示菲空的字母序列;'%s*' 表示0个或多个空白。在上面的例子中,整 阅读全文
摘要:
Lua中每个值都可具有元表。 元表是普通的Lua表,定义了原始值在某些特定操作下的行为。你可通过在值的原表中设置特定的字段来改变作用于该值的操作的某些行为特征。例如,当数字值作为加法的操作数时,Lua检查其元表中的"__add"字段是否有个函数。如果有,Lua调用它执行加法。我们称元表中的键为事件(event),称值为元方法(metamethod)。前述例子中的事件是"add",元方法是执行加法的函数。可通过函数getmetatable查询任何值的元表。可通过函数setmetatable替换表的元表。不能从Lua中改变其他类型的元表(除了使用调试库);必 阅读全文
摘要:
模式匹配函数在string库中功能最强大的函数是:string.find(字符串查找)string.gsub(全局字符串替换)string.gfind(全局字符串查找)string.gmatch(返回查找到字符串的迭代器)这些函数都是基于模式匹配的。与其他脚本语言不同的是,Lua并不使用POSIX规范的正则表达式[4](也写作regexp)来进行模式匹配。主要的原因出于程序大小方面的考虑:实现一个典型的符合POSIX标准的regexp大概需要4000行代码,这比整个Lua标准库加在一起都大。权衡之下,Lua中的模式匹配的实现只用了500行代码,当然这意味着不可能实现POSIX所规范的所有更能。 阅读全文
摘要:
基本函数库为Lua内置的函数库,不需要额外装载assert (v [, message])功能:相当于C的断言,参数:v:当表达式v为nil或false将触发错误,message:发生错误时返回的信息,默认为"assertion failed!"--------------------------------------------------------------------------------collectgarbage (opt [, arg])功能:是垃圾收集器的通用接口,用于操作垃圾收集器参数:opt:操作方法标志"Stop": 停止垃圾 阅读全文
摘要:
Lua5.1中数学库的所有函数如下表:math.pi为圆周率常量 = 3.14159265358979323846abs取绝对值math.abs(-15)15acos反余弦函数math.acos(0.5)1.04719755asin反正弦函数math.asin(0.5)0.52359877atan2x/y的反正切值math.atan2(90.0,45.0)1.10714871atan反正切函数math.atan(0.5)0.463647609ceil不小于x的最大整数math.ceil(5.8)6cosh双曲线余弦函数math.cosh(0.5)1.276259652cos余弦函数math.c 阅读全文
摘要:
这个库通过表os实现os.clock ()功能:返回一个程序使用CPU时间的一个近似值例如:local x = os.clock();print(os.clock())local s = 0;for i = 1, 100000000 do s = s + i;endprint(string.format("elapsed time : %.2f\n", os.clock() - x));输出:0elapsed time : 2.55------------------------------------------------------------------------ 阅读全文
摘要:
lua_State*luaL_newstate()Lua脚本的编译执行是相互独立的,在不同的线程上执行。通过luaL_newstate()函数可以申请一个虚拟机,返回指针类型 lua_State。今后其他所有Lua Api函数的调用都需要此指针作为第一参数,用来指定某个虚拟机。lua_State* L = luaL_newstate();---------------------------------------------------------------------------------------voidlua_close(lua_State *L)销毁指定Lua状态机中的所有对象 阅读全文
摘要:
一、文件读存:-- 似乎不支持大文件(不能超过9k?)function FileSaveLoad()local file =io.open("c:\\in.lua", "r");assert(file);local data = file:read("*a");--读取所有内容file:close();file = io.open("c:\\out.lua", "w");assert(file);file:write(data);file:close();endFileSaveLoad();二、 阅读全文
摘要:
1.简介这一节介绍一些关于栈操作、数据类型判断的LUA API,可以使用这些函数获得脚本中的变量值。2.步骤编写 test01.lua 脚本,在VS2003中创建控制台C++程序并正确配置,执行查看结果,修改test02.lua脚本后查看执行结果3.测试脚本以下是用来测试的lua脚本function plustwo(x)local a = 2;return x+a;end;rows = 6;cols = plustwo(rows);上面的脚本定义了一个函数、两个全局变量(LUA脚本变量默认是全局的)。之后的C++程序中,我们将通过栈操作获得这两个变量 rows, cols4.控制台程序#inc 阅读全文
摘要:
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函数只对其数组部分产生影响, 而另一部分则对整个table均产生影响. 下面会分开说明.table.concat(table, sep, start, end)concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开。除了table外, 其他的参数都不是必须的, 分隔符的默认值是空字符, start的默认值是1, end的默认值是数组部分的总长.sep, start, end这三个参数是顺序读入的, 所以虽然它们都不是必须参数, 阅读全文