这是我的测试代码:
mt={}
myt={}
setmetatable(myt, mt)
mt.__gc=function()print("hello gc")end
myt=nil
collectgarbage()
但是,当我运行此代码时,没有消息打印。
所以,我认为我的代码肯定有问题。
更新
mt.__gc=function()print("hello gc")end
setmetatable(myt, mt)
在__gc
解决问题之前设置setmetatable
字段(使用在线interpreter),但,当我通过C API执行相同的代码时{ {1}}在我的计划中,luaL_dofile
再次死亡。
我还在我的独立lua解释(lua 5.1.5)和' __ gcc'中进行测试。也死了。
唯一有效的案例是在线interpreter版本为5.3。
所以,我应该问我怎样才能得到' __ gc'在我的5.1版本下工作?
答案 0 :(得分:1)
您需要在调用String line;
while ((line = br.readLine()) != null){
String[] split = line.split("\\s*,\\s*");
for (int i = 0; i < split.length; i++) {
if (!(split[i] == null) || !(split[i].length() == 0)) {
// adding some stuff
line.split("\\s*\"\\s*");
// adding some other stuff
之前设置__gc
字段。
manual说:
请注意,如果您设置一个没有
setmetatable
字段的metatable,然后在metatable中创建该字段,则该对象将不会被标记为最终确定。
表格的GC方法在Lua 5.2中介绍。他们不在Lua 5.1工作。