网站定制开发成本,seo关键技术有哪些,高端品牌汽车,营销传播服务很多人都听过lua,也见过lua脚本,但可能不理解为什么lua脚本里面会有这么多没见过的函数,
而且这些函数功能是如此强大,能上天入地,无所不能
其实这些函数并不是lua自带的,都是由程序作者造出来的隐藏在了他们的主程序里
一般运行lua脚本,我们会使用自带的解释器,当你拿到一份…很多人都听过lua,也见过lua脚本,但可能不理解为什么lua脚本里面会有这么多没见过的函数,
而且这些函数功能是如此强大,能上天入地,无所不能
其实这些函数并不是lua自带的,都是由程序作者造出来的隐藏在了他们的主程序里
一般运行lua脚本,我们会使用自带的解释器,当你拿到一份lua源码后,编译出来的就是lua
比如我编写了一个lua脚本
--hello.luaprint(hello)
在linux下运行则是lua hello.lua
会打印出hello的字样
初学lua的一般就卡在这一步了,因为没有更多的功能可以写,一翻手册发现也没几个api,也不知道如何嵌入到自己的程序中,就算能使用lua运行外部脚本,也达不到文章开头所描述的那种效果
lua这门语言很有意思,它只提供了一些基本的语法和系统库功能,其它功能都没有,但有一个很强大的特性,就是可以通过很简单的方式,扩展功能 请看如下代码common.c
#include unistd.h
#include “lua.h”
#include ”lauxlib.h“static int lua_sleep(lua_State*l)
{size_t sleepTimeluaL_checkinteger(l,1);usleep(sleepTime*1000);return 0;
}LUALIB_API int luaopen_common(lua_State *l) {trace(luaopen_common()\n);luaL_Reg reg[] {{msleep,lua_sleep},{ NULL, NULL }};lua_newtable(l);luaL_setfuncs(l, reg, 0);lua_pushliteral(l, Lua common);lua_setfield(l, -2, _NAME);lua_pushliteral(l, 0.1);lua_setfield(l, -2, _VERSION);trace(luaopen_common() done\n);return 1;
}以上代码是一个最基本的lua扩展库,使用c语言开发的,只需要gcc -rdynamic -fPIC common.c -o libcommon.so 即可
编译出来之后,我们就可以通过这个库为lua增加功能了,在这段代码里面,我编写了一个common库,
只有一个功能msleep
如何使用这个库呢,看看以下的hello.lua代码
--设置动态库搜索目录,如在lib/x64下任意的libxxx.so,可以指定多个目录,用分号隔开
package.cpath package.cpath .. ;lib/x64/lib?.so..;lib/arm/lib?.solocal commonrequire(common)while true doprint(hello)common.msleep(1000)
end
在lua代码的目录下创建一个目录lib/x64,将刚才编译的库放到里面
运行代码 lua hello.lua
你就会看到程序每隔1秒打印一行hello
如果想更进一步,那就需要自己编写更多类似于msleep这样的功能了
之后写代码就不需要编译了,只需要切换lua文件就能替换程序功能,贼棒