我是Lua/LuaPlus的全新品牌,並試圖弄清metatables是如何工作的。初學者LuaPlus Metatables問題
在從手動拍攝這段代碼:
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相關聯,並設置元表,這樣我們就可以使用打印功能。
但是對於最後一行,是否只是創建一個名爲「obj1」的全局Lua變量?此時「obj1」和「MultiObjectMetaTable」將成爲全局Lua變量嗎?
這是從哪裏來的? – Alex
http://luaplus.org/projects/luaplus/repository/revisions/master/changes/Docs/LuaPlus.html 它位於「註冊對象分派函子」部分。 – Thomas