我正在寻找的是这样的:
lua脚本
MY_ARRAY = {
00, 10, 54, 32,
12, 31, 55, 43,
34, 65, 76, 34,
53, 78, 34, 93
}
c代码
lua_Number array[] = lua_getarray("MY_ARRAY");
这可能吗?有什么类似的东西可以让在 C 中处理 lua 表更容易。
你可以自己写这样的函数!行数不宜过多。但最好使用指针而不是数组,因为它们可以指向任意数量的元素。界面可能是这样的:
lua_Number *values;
size_t nvalues;
values = luaGetNumbers("MY_ARRAY", &nvalues);
/* the number of values is now nvalues */
for (int i=0; i<nvalues; i++) {
/* do something with values[i] */
}
free(values);
并且实现应该使用以下函数(来自http://www.lua.org/manual/5.2/manual.html):
void lua_getglobal (lua_State *L, const char *name);
将全局名称的值压入堆栈。
void lua_gettable (lua_State *L, int index);
将值 t[k] 压入堆栈,其中 t 是给定有效索引处的值,k 是堆栈顶部的值。
此函数从堆栈中弹出键,并将结果值放在其位置)。与在 Lua 中一样,此函数可能会触发“索引”事件的元方法(参见 §2.4)。
lua_Number lua_tonumberx (lua_State *L, int index, int *isnum);
将给定可接受索引处的 Lua 值转换为 C 类型 lua_Number(参见 lua_Number)。Lua 值必须是数字或可转换为数字的字符串(参见第 3.4.2 节);否则,lua_tonumberx 返回 0。
如果 isnum 不为 NULL,则为其所指对象分配一个布尔值,指示操作是否成功。
void lua_len (lua_State *L, int index);
返回给定可接受索引处的值的“长度”;它等价于 Lua 中的 '#' 运算符(参见第 3.4.6 节)。结果被压入堆栈。