我在 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?