加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

luaL_openlib替换为Lua 5.2

发布时间:2020-12-15 00:22:49 所属栏目:大数据 来源:网络整理
导读:我正在修改为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);
我正在修改为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"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读