Lua笔记----C++调用Lua脚本中二维table的数据
[日期:2013-03-28] | 来源:Linux社区 作者:yao2yao | [字体:大 中 小] |
接着搞一个二维的table。这也是我需要配置的目的所在。
//test.lua
t ={ {11,12,13},{21,22,23} ,}
最后的逗号,好像可有可无。Lua脚本语法比C++宽松多了。
首先我们要修改getfield。作用是取得table[key1][key2]的值
- int getfield(lua_State *L,int key1,int key2)
- {
- int result = 0;
- lua_pushnumber(L,key1);
- lua_gettable(L,-2);
- lua_pushnumber(L,key2);
- lua_gettable(L,-2);
- if (!lua_isnumber(L,-1))
- cout<<"error"<<endl;
- result = (int)lua_tonumber(L,-1);
- lua_pop(L,2); //退两个元素
- return result;
- }
关键点是在pop时,退了两个元素。
//完整代码
- #include <iostream>
- #include <stdio.h>
- usingnamespace std;
- extern"C"
- {
- #include "lua.h"
- #include "lualib.h"
- #include "lauxlib.h"
- };
- lua_State *L;
- staticvoid stackDump(lua_State *L)
- {
- int top = lua_gettop(L);
- for (int i = 1; i <= top; i++)
- {
- int t = lua_type(L,i);
- switch(t)
- {
- case LUA_TSTRING:
- printf("'%s'",lua_tostring(L,i));
- break;
- case LUA_TBOOLEAN:
- printf(lua_toboolean(L,i)?"true":"false");
- break;
- case LUA_TNUMBER:
- printf("%g",lua_tonumber(L,i));
- break;
- default:
- printf("%s",lua_typename(L,t));
- }
- printf(" ");
- }
- printf("\n");
- }
- int getfield(lua_State *L,int key1,int key2)
- {
- int result = 0;
- lua_pushnumber(L,key1);
- cout<<"pushnumber : ";
- stackDump(L);
- lua_gettable(L,-2);
- cout<<"gettable : ";
- stackDump(L);
- lua_pushnumber(L,key2);
- cout<<"pushnumber : ";
- stackDump(L);
- lua_gettable(L,-2);
- cout<<"gettable : ";
- stackDump(L);
- if (!lua_isnumber(L,-1))
- cout<<"error"<<endl;
- result = (int)lua_tonumber(L,-1);
- cout<<"tonumber : ";
- stackDump(L);
- lua_pop(L,2);
- cout<<"lua_pop : ";
- stackDump(L);
- return result;
- }
- int main()
- {
- L = lua_open();
- luaL_openlibs(L);
- luaL_dofile(L,"test.lua");
- cout<<"start : ";
- stackDump(L);
- lua_getglobal(L,"t");
- cout<<"getglobal : ";
- stackDump(L);
- for (int i = 1; i <= 2; i++)
- for (int j = 1; j <= 3; j++)
- {
- cout<<"result:"<<getfield(L,i,j)<<endl;
- }
- cout<<endl;
- system("pause");
- lua_close(L);
- return 0;
- }
结果部分截图
这样C++就调用了lua里二维table的数据。
这里table里是number型,如果是其他类型,需要自己重写getfield函数。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。