我正在修改为Lua< 5.2接到电话我不知道相当于:
luaL_openlib(L,"Polycore",polycoreLib,0);
其中polycoreLib是
static const struct luaL_Reg polycoreLib []
如何替换luaL_openlib的调用?
lua维基只有states:
Calls such as
luaL_openlib(L,name,lreg,x);
should be carefully rewritten because a global table with the given name will be searched and possibly created.
解决方法
有两个答案:一个用于复制这里的早期版本的行为(创建一个全局表),另一个用于实现现在常规的行为(即创建和返回匿名表)。
对于前者:
lua_newtable(L); luaL_setfuncs(L,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,"Polycore");
后者更容易,因为您不需要关心合并:
lua_newtable(L); luaL_setfuncs(L,0); return 1;
local Polycore = require "Polycore"