gpt4 book ai didi

c++ - 初学者 LuaPlus 元表问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:57:48 25 4
gpt4 key购买 nike

我是 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变量吗?

最佳答案

这不是标准的 Lua,看起来你正在使用一些我不熟悉的 C++ 包装器,但我可以做出一些猜测

In the first line we create a new table, but the second line is a little confusing. In this table we just created, we are setting the element with key __index equal to the table itself. Why is __index chosen as a key and why set an element of the table to be equal to the table itself?

__index 是使用元表时的特殊键。例如,如果我有一个表 t 并尝试使用 foo 键对其进行索引,自然地,我将取回与该键关联的值。但是可以说那里什么都没有。通常,如果您尝试索引到一个什么都没有的位置,您将返回 nil

但如果你有一个包含特殊键 __index 的元表,那就不行了!如果您有一个带有 __index 函数或表的元表,它将使用它来找到您的值。如果您像此处一样将表分配给 __index ,它将查看该表并返回您提供的键的值。这允许您获得类似继承的行为。即,如果表 t 没有此值,则默认为其他表中的值。

但对于最后一行,是否只是创建一个名为“obj1”的全局 Lua 变量?此时“obj1”和“MultiObjectMetaTable”会是全局Lua变量吗?

正如我提到的,这不是标准的 Lua,所以我不完全确定那里发生了什么。 (虽然混合使用 C++ 和 Lua 可能会很棘手,所以当您仍在学习 Lua 时,最好坚持使用 C 接口(interface),这样您就可以了解真正发生的事情。一旦您了解了,您就可以转向更自动化的解决方案)

关于c++ - 初学者 LuaPlus 元表问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7247284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com