我在C中創建了一個userobject,並且作爲它的一部分,我創建了一個metatable來覆蓋像__tostring
,__index
等方法。但我注意到,可以通過getmetatable()
檢索對象的metatable。如果我的metatable有一個__metatable
鍵,似乎可以讓getmetatable()
返回任意表。我想getmetatable()
返回nil
,所以我首先想到的是添加__metatable
鍵與nil
,但是這顯然是行不通的,因爲它實際上並沒有添加__metatable
關鍵的元表:lua:我如何讓getmetatable()返回零?
struct my_obj* obj = (struct my_obj*)lua_newuserdata(L, sizeof(struct my_obj));
if (luaL_newmetatable(L, "mymetatable") != 0) {
lua_pushliteral(L, "__metatable");
lua_pushnil(L);
lua_rawset(L, -3); /* will not work, can not add a nil... */
}
lua_setmetatable(L, -2);
這可以以某種方式完成,或者我必須堅持填寫一個空的表格到__metatable
?
'{__metatable = false}'是否足夠接近? – greatwolf 2015-02-09 10:07:03