初学者 LuaPlus 元表问题
2011-8-30 17:27:55
收藏:0
阅读:93
评论:1
我是Lua/LuaPlus的新手,正在尝试弄清楚元表如何工作。
在手册上提取的以下代码中:
LuaObject metaTableObj = state->GetGlobals().CreateTable("MultiObjectMetaTable");metaTableObj.SetObject("__index", metaTableObj);metaTableObj.RegisterObjectFunctor("Print", &MultiObject::Print);
在第一行中,我们创建了一个新表,但第二行有点令人困惑。在我们刚刚创建的这个表中,我们将键为|__index|的元素设置为表本身。为什么选择|__index|作为关键字,并设置元素为表本身?
然后,在下一段代码中:
MultiObject obj1(10);LuaObject obj1Obj = state->BoxPointer(&obj1);obj1Obj.SetMetaTable(metaTableObj);state->GetGlobals().SetObject("obj1", obj1Obj);
我们创建了一个C++对象,通过BoxPointer调用将其地址与LuaObject相关联,并设置元表以便我们可以使用Print函数。
但是对于最后一行,这只是创建一个名为"obj1"的全局Lua变量吗?此时,“obj1”和“MultiObjectMetaTable”将成为全局Lua变量?
原文链接 https://stackoverflow.com/questions/7247284
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在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 模式将字符串(嵌套数组)转换为真正的数组?
这不是标准的 Lua,看起来你正在使用一个我不熟悉的 C++ 包装器,但我可以猜测一些东西
__index
是使用元表时的特殊键。如果有一个表t
,我试图使用foo
作为键索引它时,通常我会得到与该键对应的值。但如果没有这样的键,通常情况下会返回nil
。但是如果在元表中有特殊键
__index
,就不会返回nil
!如果一个元表有一个__index
函数或表,它会使用它来找到你需要的值。如果你在这里分配了一个表到__index
中,它会查找那个表并返回你提供的键的值。这允许你获得类似继承的行为,即如果表t没有这个值,就默认使用另一个表中的值。但对于最后一行,那只是创建一个名为“obj1”的全局Lua变量吗?此时“obj1”和“MultiObjectMetaTable”将成为全局Lua变量吗?
正如我所提到的,这不是标准的Lua,所以我不太确定发生了什么。(混合使用C++和Lua可能变得麻烦,因此在学习Lua时最好使用C接口,这样您就可以真正理解发生了什么。一旦了解了这一点,您可以转向更自动化的解决方案)