Lua metatable类析构函数

And*_*rei 2 oop lua class metatable

我有以下Lua metatable类,如何向它添加析构函数,以便当某个条件到达时它会破坏创建的对象并将其值设置为nil?

-------------------------------------------------
-- Arrow class
-------------------------------------------------

local arrow = {}
local arrow_mt = { __index = arrow } -- metatable

function arrow.new(x, y) -- constructor
    local newArrow = {
        position = { x = x, y = y }
    }

    return setmetatable( newArrow, arrow_mt )
end

function arrow:remove()
    -- remove the object here
    -- self = nil dosent work
end
Run Code Online (Sandbox Code Playgroud)

Mic*_*man 5

正如Nicol所说,一旦变量获得对象的引用,对象本身就无法控制变量(即将其值设置为nil).实际上,这是一件好事 - 想象有人在某处保存了对您的引用对象的局部变量.突然在一个未知的时刻,它成为一个引用(因为它在其他地方被破坏),并且任何进一步访问它都会导致错误.

这是一个无赖,我需要立即销毁对象.

你真的需要销毁这个物体吗?为什么?是不是Lua垃圾收集器正确地完成了它的工作?是不是有另一种方法来设计对象之间的关系?

例如,在最简单的情况下,您可以强制执行垃圾回收collectgarbage("collect").垃圾收集将清除所有没有引用的对象.如果你真的想要变量消失,请将它们保存在弱表中.当然,Lua会在你分配对象时自动进行垃圾收集(除非你停止它).您还可以修改垃圾回收的速度.