- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在调整一个为 Lua < 5.2 编写的库,然后接到了一个我不知道的等价物的电话:
luaL_openlib(L, "Polycore", polycoreLib, 0);
polycoreLib
是一个
static const struct luaL_Reg polycoreLib []
如何替换对 luaL_openlib
的调用?
仅限 lua wiki 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, 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/
我正在将 Lua (5.1) 嵌入到 C/C++ 应用程序中。 我正在使用 LuaL_openlibs() 函数加载基础库。但是,此函数加载了一些我想禁用的其他库,以便我的 Lua 脚本无法使用它们。
我正在编写一个将 Lua 嵌入到 C 程序中的简单测试。 我在 Windows/Mingw 和 Linux 上遇到同样的问题。这是我在 Linux 上使用的 gcc 命令: gcc -Wall -o
我正在调整一个为 Lua < 5.2 编写的库,然后接到了一个我不知道的等价物的电话: luaL_openlib(L, "Polycore", polycoreLib, 0); polycoreLib
我想在我的 C 应用程序中嵌入一些 Lua 脚本......专门用于日志记录。我以前使用过 LOG4C,但实际上我更喜欢“Lua Logging”...... 注意:我根本不是 Lua 专家,但我正在
我是一名优秀的程序员,十分优秀!