LuaJIT是否支持表__gc?

Nic*_* M. 8 lua luajit

Lua 5.2(与5.1相反)支持表的__gc.

LuaJIT借用了这个不错的功能吗?

(我做了谷歌搜索,并检查了LuaJIT的变更历史,但无法找到答案.)

cat*_*ell 9

就试一试吧:

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

.

$ 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
$
Run Code Online (Sandbox Code Playgroud)

所以简短的回答是否定的.

  • @delnan这不是会发生什么,但我编辑了我的答案以使其清楚(调用`collectgarbage`两次确保调用所有终结器). (2认同)
  • 你对代码的修改仍然没有解决它因为你没有用"do ... end"包装"local x"所以"x"变量仍然存在而且collectgarbage()不会处理这个表. (2认同)
  • @NiccoloM.当然你是对的!固定,谢谢. (2认同)