luaL_openlib替换为Lua 5.2

前端之家收集整理的这篇文章主要介绍了luaL_openlib替换为Lua 5.2前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在修改为Lua< 5.2接到电话我不知道相当于: @H_301_2@luaL_openlib(L,"Polycore",polycoreLib,0);

其中polycoreLib是

@H_301_2@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.

解决方法

有两个答案:一个用于复制这里的早期版本的行为(创建一个全局表),另一个用于实现现在常规的行为(即创建和返回匿名表)。

对于前者:

@H_301_2@lua_newtable(L); luaL_setfuncs(L,0); lua_setglobal(L,"Polycore");

这与luaL_openlib不完全相同,因为如果存在一个现有的全局表Polycore,它将覆盖它而不是与它合并。如果合并是一个问题,首先使用lua_getglobal,然后如果它推一个表重新使用而不是创建一个新的表:

@H_301_2@lua_getglobal(L,"Polycore"); if (lua_isnil(L,-1)) { lua_pop(L,1); lua_newtable(L); } luaL_setfuncs(L,"Polycore");

后者更容易,因为您不需要关心合并:

@H_301_2@lua_newtable(L); luaL_setfuncs(L,0); return 1;

使用这种方法调用者的责任是绑定表,如:

@H_301_2@local Polycore = require "Polycore"

猜你在找的Lua相关文章