我正在使用Lua C API製作我自己的遊戲引擎。我得到了這樣的Lua表層次:使用Lua C API在子表中插入函數
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函數(https://www.lua.org/manual/5.3/manual.html# luaL_setfuncs),它可以幫助將函數註冊到表格中,你使用的是哪個版本的Lua? – Adam
感謝您的回覆。我正在使用Lua 5.1,看起來這裏沒有這樣的API函數。 –
確實,這個函數是在Lua 5.2中添加的,但你也許可以使用[luaL_register](https://www.lua.org/manual/5.1/manual.html#luaL_register)。 – Adam