我正在修改为Lua

luaL_openlib(L, "Polycore", polycoreLib, 0);

其中polycoreLib是一个
static const struct luaL_Reg polycoreLib []

如何替换对luaL_openlib的调用?

Lua Wiki仅states:

最佳答案

对此有两个答案:一个用于在此处复制较早版本的行为(在其中创建全局表),另一个用于实现现在的常规行为(即创建并返回匿名表)。

对于前者:

lua_newtable(L);
luaL_setfuncs(L, polycoreLib, 0);
lua_setglobal(L, "Polycore");

这与luaL_openlib不太一样,因为如果存在现有的全局表Polycore,它将覆盖它而不是与之合并。如果需要考虑合并,请首先使用lua_getglobal,然后如果它推送了一个表,请重用该表,而不是创建一个新表:
lua_getglobal(L, "Polycore");
if (lua_isnil(L, -1)) {
  lua_pop(L, 1);
  lua_newtable(L);
}
luaL_setfuncs(L, polycoreLib, 0);
lua_setglobal(L, "Polycore");

后者更容易,因为您无需考虑合并:
lua_newtable(L);
luaL_setfuncs(L, polycoreLib, 0);
return 1;

使用这种方法,绑定(bind)表是调用者的责任,如下所示:
local Polycore = require "Polycore"

关于c - luaL_openlib替代Lua 5.2,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19041215/

10-11 22:12