Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua 为什么uu gc没有';收集表?的垃圾时不工作;_Lua - Fatal编程技术网

Lua 为什么uu gc没有';收集表?的垃圾时不工作;

Lua 为什么uu gc没有';收集表?的垃圾时不工作;,lua,Lua,最近,我在学习垃圾收集。我编写了一个示例。代码如下: mytablea {"1","2","3"} print(collectgarbage("count")) for i = 1, 500000 do table.insert(mytable, i) end debug.setmetatable(mytable, {_gc = function ()print("dead")end}) mytable = nil print(collectgarbage("count")) print

最近,我在学习垃圾收集。我编写了一个示例。代码如下:

mytablea {"1","2","3"}
print(collectgarbage("count"))
for i = 1, 500000 do
    table.insert(mytable, i)
end
debug.setmetatable(mytable, {_gc = function ()print("dead")end})
mytable = nil
print(collectgarbage("count"))
print(collectgarbage("collect"))
print(collectgarbage("count"))

我对终端中为什么没有输出感到困惑(gc似乎不工作)。但是在完成调用后,它的内存确实会减少!我想知道Lua5.1是否在表中不支持此功能,或者我的linux是否有问题(可能是ubuntu中的一些错误)。

正确的元表条目是
\uu gc
,而不是
\u gc


在任何情况下,Lua 5.1都不支持表的gc元方法。

Lua 5.1不支持表上的
\uu gc
(注意,它是两个下划线,不是一个)。 如果可能,请移动到更新版本的Lua(即5.2或5.3)以获得支持

如果你真的需要它;您可以使用未记录的
newproxy
函数获取用户数据,以将
\uu gc
附加到:

do
    local p = newproxy(false);
    debug.setmetatable(p, {__gc = function() print("dead") end})
    local t = {some_key = p}
end
collectgarbage()
collectgarbage()

我在需要lua 5.1兼容性的项目中使用它,例如

Oh!文件中真的没有提到桌子!谢谢,我应该仔细阅读这份文件的!垃圾收集元表条目就是这样的:Lua5.1只支持userdata,LuaJIT支持cdata,Lua5.2支持表。所有3个版本都在积极使用。