
类型:下载工具
语言:简体中文
更新:2025-12-16 11:23
大小:373K
版本:v5.4.6
平台:Windows11,Windows10,Windows8,Windows7,WinXP,WinVista
Lua是一个小巧的脚本语言,标准 C 撰写而成,它可以被 C/C++ 代码调用,也可以反过来调用 C/C++ 的函数,几乎在所有操作系统和平台上都可以编译、运行。Lua 并没提供强大的库,一个完整的 Lua 讲解器不过 200KB,但它在所有脚本引擎中速度是最快的,是作为嵌入式脚本的最好选择,如此更容易让用户进行理解和维护。
2、可扩展
可扩展 Lua并不象其它很多"大而全"的语言那样,包含不少功能,譬如互联网通讯、图形界面等。但Lua提供了很易于用的扩展接口和机制:由宿主语言提供这类功能,Lua可以用它们,就像是本来就内置的功能一样。3、其它特质
Lua还具备其它一些特质:同时支持面向过程编程和函数式编程;自动内存管理;只提供了一种通用种类的表(table),用它可以达成数组,哈希表,集合,对象;语言内置模式匹配;闭包;函数也可以看做一个值;提供多线程(协同进程,并不是操作系统所支持的线程)支持;通过闭包和table可以很便捷地支持面向对象编程所需要的一些重点机制,譬如数据抽象,虚函数,继承和重载等。Web 应用脚本
扩展和数据库插件如:MySQL Proxy 和 MySQL WorkBench安全系统,如入侵测试系统
print"Hello,world!"
一个比较复杂一点的例子,但它展示了什么是闭包:function create|a|counter
local count=0return function
count = count + 1return count
endend
create|a|counter返回一个记数器,每次调用这个记数器,都会得到一个比上次大1的值。注意:调用的时候,假如你的调用是如此的的:
print)那样每次输出是一样的结果,没计数的成效,只能输出计数器的地址,应该如此调用:
ct = create|a|counterprint) ||输出 1
print) ||输出 2数据交换
介绍Lua和C程序通过一个栈交换数据: struct lua|State
栈的序号可以从栈顶和栈底计数,从栈底计数,则栈底是1,向栈顶方向递增。从栈顶计数,则栈顶是|1,向栈底方向递减。一般都用从栈底计数的方法。栈的默认大小是20,可以用lua|checkstack修改.用lua|getTOP则可以获得栈里的元素数目。并非说在栈顶有一个整形元素。而是计算了一下栈顶元素在栈里的正index,等于元素数目。Lua 调用C函数用的栈是临时的,调用结束之后就被销毁了。
怎么样从栈中获得从Lua脚本中的参数假如了解Lua脚本中某个全局变量的名字,可以用
void lua|getglobal这个函数会将name所指Lua变量的值放在栈顶.
若是在C 函数中要获得Lua调用函数用的参数:第一用lua|getTOP检查参数数目
用lua|is 类函数测试参数的种类,做好错误处置用lua|to 类函数将参数转换为number或者string。
lua|tonumber返回的是doublelua|tostring返回的是char*
用lua|remove从栈中删除掉元素继续获得下一个元素。 由于每次都调用lua|remove,所以每次调用lua|tonumber,用的index都将固定是|1,即栈顶。
假如lua|istable成立,那样说明栈顶是一个table 注意 tabl e是不可以取出来的,只能把 table 里的元素一个个取出来。第一把元素的名字压入栈顶:
lua|pushstring;然后就能用lua|gettable调用,值会放在栈顶。同时刚刚压入的元素名字被弹出。用上面的方法,可以把这个值取出来。记得也应该lua|remove。 假如table的某一个元素也是table,重复即可。当table的所有元素都取完了,记住这个table本身还在栈里,要用lua|remove把它删除。
假如要获得的是一个数组,用lua|next可以遍历这个数组:第一lua|pushnil,压入一个空值,然后
while!=0){
if)//判断元素种类,也会是string{
arrf.addlua|tonumber);//获得元素的值lua|remove;
}}
lua|remove;//删除NIL怎么样从C返回数据给Lua脚本
用 lua|push 类函数压入数据到栈中,并用return n;来告诉Lua返回了几个返回值。 Lua是天生支持多个返回值的,如x,y = Test
Lua会依据n从栈里取相应的数据。假如要返回一个table:
lua|newtable;//创建一个表格,放在栈顶lua|pushstring; //压入key
lua|pushnumber;//压入valuelua|settable;//弹出key,value,并设置到table里面去
lua|pushstring;//压入keylua|newtable;//压入value,也是一个table
lua|pushstring; //压入subtable的keylua|pushnumber;
valuelua|settable;//弹出key,value,并设置到subtablelua|settable;//这个时候父table的地方还是|3,弹出key,value,
//并设置到table里去lua|pushstring;//同上
lua|pushnumber;lua|settable;
return1;//栈里目前就一个table其他都被弹掉了。假如要返回一个数组,//用如下代码:
lua|pushstring;lua|newtable;
{//atrick:otherwisetheluaenginewillcrash.ThiselementisinvisibleinLuascript
lua|pushnumber;lua|rawseti;
for; i++){
lua|pushnumber;lua|rawseti;
}}
lua|settable;如此产生的数组可以在Lua中如下遍历:
for i,v ini pairsdo
printend
或者是for i=1,table.getn
do只有数组才能如此,name,value构成的Record不可以,table.getn也只对数组有效。
因为上述代码的高度相似性,所以比较容易达成自动生成这类代码。譬如,依据C的一个struct概念:typedef enum{BR|9600,BR|4800,}BaudRate;
typedef struct flag{
intonoff;intj;
longl;doubled;
char*name;BaudRaterate;
}flag;可以自动产生如下代码:bool DataToLua
{lua|newtable;
lua|pushstring;lua|pushnumberdata.onoff);
lua|settable;lua|pushstring;
lua|pushnumberdata.j);lua|settable;
lua|pushstring;lua|pushnumberdata.l);
lua|settable;lua|pushstring;
lua|pushnumberdata.d);lua|settable;
lua|pushstring;lua|pushstring);
lua|settable;lua|pushstring;
lua|pushnumberdata.rate);lua|settable;
return true;}
LuaToData也是类似的。假如用面向对象的方法封装起flag来,把DataToLua变成flag类的一个办法,就愈加便捷了。
所有些为电脑和turtle(机器人)的代码都是基于Lua的,你可以用它们与有线路由器、打印机、磁盘驱动器、显示器互动。
Adobe Photoshop LightroomLightroom是Adobe企业的一款摄影后期制作软件,最开始的版本由Shadowland代码撰写,后期版本部分用Lua达成,Lua代码占到代码总量的63%。
金庸群侠传lua复刻版这个游戏,游戏迷们想来都玩过了。牛人用lua脚本重新弄了下。
魔兽世界他的插件用的也是lua。
仙剑奇侠传五解压游戏到资源目录可以看到游戏到脚本全部是用Lua语言撰写的。
Garry's Mod这个游戏的所有创意工坊插件都是由LUA脚本撰写的。
Don't StarveTAG标签:lua开发环境(1)lua for wind(1)
转载请说明来源于谷普绿色软件(https://www.guixh.com)
本文地址:https://www.guixh.com/soft/12584.html
郑重声明:文章来源于网络作为参考,本站仅用于分享不存储任何下载资源,如果网站中图片和文字侵犯了您的版权,请联系我们处理!邮箱3450399331@qq.com