C++调用Lua:使用setField来指向自己?

以下是 C++ 中的代码:

l_newTable(L);                  //栈:newtable
l_getGlobal(L, "A");            //栈:newtable A
l_setfiled(-2, "__index")       //栈:newtable       => newtable.__index = A

这是正常的。然而,如果我想将新表的 __newindex 设置为其自身,该如何编写代码?它需要将 __newindex 设置为 newTable 自己,但是使用 setfield 会调用 Pop,这意味着:

l_newTable(L);                 //栈:newtable
l_setfield(-1, "__newindex")   //栈:-1              => newtable 将被弹出
点赞
用户485561
用户485561

newtable从堆栈中被弹出之前,应该使用lua_pushvalue来复制它:

lua_newTable(L);                 //堆栈: newtable
lua_pushvalue(L, -1);            //堆栈: newtable, newtable
lua_setfield(-2, "__newindex")   //堆栈: newtable  => newtable.__newindex = newtable
2014-05-19 11:12:12