我在 C 中创建了一个用户对象,作为其中的一部分,我创建了一个元表来覆盖诸如__tostring
、__index
等方法。不过,我注意到可以通过getmetatable()
. 如果我的元表有键,似乎可以getmetatable()
返回任意表。__metatable
我想getmetatable()
返回nil
,所以我的第一个想法是添加一个__metatable
键nil
,但这显然不起作用,因为它实际上并没有将__metatable
键添加到元表:
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
?