1

我正在寻找的是这样的:

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 表更容易。

4

1 回答 1

4

你可以自己写这样的函数!行数不宜过多。但最好使用指针而不是数组,因为它们可以指向任意数量的元素。界面可能是这样的:

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 节)。结果被压入堆栈。

于 2012-07-26T05:53:33.203 回答