2013-10-21 9 views

risposta

9

Provare per credere:

-- test.lua 
do 
    local x = setmetatable({},{ 
    __gc = function() print("works") end 
    }) 
end 
collectgarbage("collect") 
collectgarbage("collect") 

.

$ lua51 -v 
Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio 
$ lua51 test.lua 
$ lua52 -v 
Lua 5.2.2 Copyright (C) 1994-2013 Lua.org, PUC-Rio 
$ lua52 test.lua 
works 
$ luajit -v 
LuaJIT 2.0.2 -- Copyright (C) 2005-2013 Mike Pall. http://luajit.org/ 
$ luajit test.lua 
$ 

Quindi la risposta breve è no.

+1

È possibile che LuaJIT non si preoccupi di eseguire un ciclo GC al momento dello spegnimento. Uno script più lungo e più pesante potrebbe essere un test migliore. – delnan

+2

@delnan Questo non è quello che succede ma ho modificato la mia risposta per chiarire (chiamare 'collectgarbage' due volte assicura che tutti i finalizzatori siano chiamati). – catwell

+1

Grazie per averlo sistemato. – delnan