2013-10-21 13 views

Odpowiedz

9

Wystarczy spróbować:

-- 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 
$ 

Krótka odpowiedź brzmi: nie.

+1

Możliwe, że LuaJIT po prostu nie przeszkadza w uruchomieniu cyklu GC podczas zamykania. Dłuższy, cięższy skrypt przydziału może być lepszym testem. – delnan

+2

@delnan Tak się nie dzieje, ale zredagowałem swoją odpowiedź, aby było jasne (dwukrotne wywołanie 'collectgarbage' zapewnia wywołanie wszystkich finalizatorów). – catwell

+1

Dzięki za rozliczenie. – delnan