C向Lua函数传递table参数

有时需要向函数传递相对比较复杂的数据,定义多个形参显得很难看,C语言函数中通常传递一个数据结构,而对于lua最直接的莫过于传递一个table数据。C调用lua函数时,也可以通过构造table数据传递给lua函数。

基本步骤比较简单,大致是(1)获取lua函数(2)在栈中构造一个table(3)向table中压入相应的数据(key-value)(4)执行lua函数。

以下伪码详细描述了这个过程:

......
lua_getglobal(L, "demoFunc"); // 获取Lua函数名

lua_newtable(L); // 创建一个table
lua_pushstring(L, "intVal");  //key为intVal
lua_pushinteger(L,1234);      //值为1234
lua_settable(L, -3);          //写入table
lua_pushstring(L, "strVal");  //key为strVal
lua_pushstring(L, "yxh");     //值为yxh
lua_settable(L, -3);          //写入table

lua_pcall(L,1,0,0); // 调用demoFunc函数
......