【发布时间】:2011-11-07 00:25:56
【问题描述】:
我是 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变量吗?
【问题讨论】:
-
这是出自什么手册?
-
luaplus.org/projects/luaplus/repository/revisions/master/… 在“注册对象调度函子”部分下。