#include <stdio.h> extern "C"{ #include "lua.h" #include "lualib.h" #include "lauxlib.h" } /*Lua 解释器指针 */ static int l_getarr (lua_State *L) { lua_newtable(L); lua_pushnumber(L,7); lua_rawseti(L,1,1); lua_pushnumber(L,5); lua_rawseti(L,1,2); lua_pushnumber(L,3); lua_rawseti(L,-2,3); lua_pushnumber(L,4); lua_rawseti(L,-2,4); lua_pushstring(L,"guoyilong"); lua_rawseti(L,-2,5); return 1; } int main ( int argc, char *argv[] ){ lua_State* L; /*初始化Lua */ L=lua_open(); luaopen_base(L); luaopen_table(L); luaopen_string(L); luaopen_math(L); lua_pushcfunction(L,l_getarr); lua_setglobal(L,"getarr"); /*运行脚本 */ if (luaL_dofile(L, "testlua.lua")) { printf("run script failed\n"); } else { lua_getglobal(L,"result"); if(lua_isnumber(L,-1)) { printf("The result of the lua script is %d\n",lua_tonumber(L,-1)); } } /*清除Lua */ lua_close(L); return 0; }
lua 中是以堆栈形式存储的,如下代码表示
lua_pushnumber(L,7); //表示向堆栈中存储7
lua_rawseti(L,1,1); //t[1]=7 如果堆栈看成个数组,那么数组第一个也就是t[1]是7
同理
lua_pushnumber(L,5);
lua_rawseti(L,1,2); 表示数组的第二个也就是t[2]是5
另外有一个暂时还不是特别明白的地方那就是 lua_rawseti(L,-2,2) 和 Lua_rawseti(L,1,2) 是同样的效果,我查了一下文档,Lua_rawseti 函数中的第二个参数是index
我换成 -3或者2 程序会报错 重新换成-2或者1就没什么问题啦
testlua.lua 文件内容如下
array = getarr() if array ~= nil then result = 1 print (table.getn(array)) for i=1,table.getn(array),1 do print (array[i]) end else result = 0 end