如何明确调用lua gc?

时间:2016-12-13 09:33:06

标签: lua garbage-collection

这是我的测试代码:

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版本下工作?

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工作。