总结了下lua的使用,有点乱,也不完善,先帖出来吧,这也可以成为自己更新的动力,毕竟是有人看的。
1. 创建一个table并设置表的元素:
lua_newtable(L);
lua_pushinteger(L,1);
lua_pushstring(L,"abc");
lua_settable(L,-3);
lua_setglobal(L,"t");
以上的代码等价于脚本:
t = {'abc'}
或者:
t = {}t[1] = 'abc'
lua_setglobal时,新创建的table仍然在栈顶。
2. 如何遍历table中的元素:
local tt = {1,2,3}
for k,v in ipairs(tt) do
print(k,v)
end
3. 如何获取table的长度:
t = {1,2,3}
print(#t)
输出3
lua_objlen(L,index)
index为table所在的堆栈的位置。
4. 如何访问文件:
f = io.open('test.txt,'r')
for line in f:lines() do
print(line)
end
f:close()
"*n": 读取一个数值,注意数值在文件中也是以字符串的形式保存的。
"*a": 从当前位置开始读取所有文件内容。
"*l": 读取一行字符串,不指定参数的read即相当于read('*l')
5. 获取表的元素
t = {'abc',x=123,'def'}
print(t[1])
输出:
abc
6. 如何通过lua API调用lua脚本里的函数
脚本中:
function f(a,b,c)
return a..b..c
end
t = {x=1}
C代码中:
lua_getglobal(L,"f"); /* function to be called */
lua_pushstring(L, "how"); /* 1st argument */
lua_getglobal(L, "t"); /* table to be indexed */
lua_getfield(L, -1, "x"); /* push result of t.x (2nd arg) */
lua_remove(L, -2); /* remove 't' from the stack */
lua_pushinteger(L, 14); /* 3rd argument */
lua_call(L, 3, 1); /* call 'f' with 3 arguments and 1 result */
printf("get return value: %s\n",lua_tostring(L,-1));
会输出:
get return value: how12314
7. 如何使用多任务:
co = coroutine.create(function() print("hello,world") end)
coroutine.status(co)
print(coroutine.status(co))
--suspended
coroutine.resume(co)
--hello,world
print(coroutine.status(co))
--dead
8. 如何移除栈中的一个元素:
通过lua_remove可以移除栈中指定索引中的元素具体的示例见:如何通过lua API调用lua脚本里的函数
9. 如何添加多行注释
对于多行注释,如何避免每行的开始都添加“--”?可以用下面的方法:
--[[
comment 1
comment 2
...
]]
多行注释以“--[[”开始,以“]]”结束