luaL_openlib在Lua 5.2中的替代方案
2013-9-27 1:13:2
收藏:0
阅读:87
评论:1
我正在适配一个用于 Lua<5.2 写的库,并遇到一个我不知道相应的函数调用:
luaL_openlib(L, "Polycore", polycoreLib,0);
其中 polycoreLib 是一个
static const struct luaL_Reg polycoreLib[]
我该如何替换对 luaL_openlib 的调用?
lua wiki 只说明:
像
luaL_openlib(L, name, lreg, x)这样的调用应该仔细重写,因为将搜索给定名称的全局表,并可能创建表。
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
有两个答案:一个是为了复制早期版本的行为(在创建全局表中创建),而另一个是为了实现现在常规的行为(即创建并返回一个匿名表)。
对于前者:
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;使用这种方法,绑定表是调用者的责任,例如:
local Polycore = require "Polycore"