【发布时间】:2016-08-04 23:02:34
【问题描述】:
我正在使用 Lua C API 制作自己的游戏引擎。我得到了这样的 Lua 表层次结构:
my_lib = {
system = { ... },
keyboard = { ... },
graphics = { ... },
...
}
我还有一些 C 函数,我想注册,类似这样的:
inline static int lua_mylib_do_cool_things(lua_State *L) {
mylib_do_cool_things(luaL_checknumber(L, 1));
return 0;
}
那么,我怎样才能像 my_lib 子表的成员一样注册呢?
my_lib = {
system = { do_cool_things, ... },
keyboard = { ... }
graphics = { ...}
}
现在我只知道注册全局表成员的方法,它是这样工作的:
inline void mylib_registerFuncAsTMem(const char *table, lua_CFunction func, const char *index) {
lua_getglobal(mylib_luaState, table);
lua_pushstring(mylib_luaState, index);
lua_pushcfunction(mylib_luaState, func);
lua_rawset(mylib_luaState, -3);
}
但是子表呢?
【问题讨论】:
-
有API functions可以帮助将函数注册到表中,您使用的是哪个版本的Lua?
-
感谢您的回复。我用的是Lua 5.1,貌似没有这样的API函数。
-
没错,这个功能是在 Lua 5.2 中添加的,但你也许可以改用luaL_register。
-
@VasiliyPupkin 当然有
-
您能写一些示例代码吗?正如我所说,我知道如何使用全局表,但不知道子表。