我在 C 中实现了 Simple Lua 类。类的用法:
require("test")
function foo()
local t1 = test()
local t2 = test()
t1:attach(t2)
return t1
end
o = foo()
-- some code
o = nil
附加功能:
int class_attach(lua_State *L)
{
module_data_t *mod = luaL_checkudata(L, 1, "test");
luaL_checktype(L, 2, LUA_TUSERDATA);
module_data_t *child = lua_touserdata(L, 2);
printf("%p->%p\n", (void *)mod, (void *)child);
return 0;
}
从函数 t2 返回后,对象被 gc 清理。有没有可能防止这种情况。在 t1 和 t2 对象之间设置引用?(仅在清理父模块(t1)后才调用 __gc 元方法(t2 对象))。
简单的方法是使用表:
function foo()
ret = {}
ret[1] = test()
ret[2] = test()
ret[1]:attach(ret[2])
return ret
end
但这不是有趣的方式。谢谢!