【发布时间】:2012-07-24 15:32:03
【问题描述】:
我正在寻找的是这样的:
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 脚本
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)。结果是 压入堆栈。
【讨论】: