luaL_openlib替换为Lua 5.2

前端之家收集整理的这篇文章主要介绍了luaL_openlib替换为Lua 5.2前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在修改为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"

猜你在找的Lua相关文章