Lua元表类析构函数
2011-12-5 21:32:32
收藏:0
阅读:215
评论:2
我有以下Lua元表类,如何向其中添加一个析构函数,使得当某个条件到达时,它将解除创建的对象并将它的值设置为nil?
-------------------------------------------------
-- 箭头类
-------------------------------------------------
local arrow = {}
local arrow_mt = { __index = arrow } -- 元表
function arrow.new(x, y) -- 构造函数
local newArrow = {
position = { x = x, y = y }
}
return setmetatable( newArrow, arrow_mt )
end
function arrow:remove()
-- 在此处移除对象
-- self = nil不起作用
end
原文链接 https://stackoverflow.com/questions/8392168
点赞
stackoverflow用户221509
正如Nicol所说,一旦一个变量获得了对你的对象的引用,对象本身就无法控制该变量(即将其值设置为nil)。事实上,这是件好事 - 想象一下,有人在某个地方将对你对象的引用保存在一个局部变量中。突然,在某个未知的时刻,它变成了一个nil引用(因为它在其他地方被销毁了),任何对它的进一步访问都会导致错误。
糟糕了,我需要立即销毁对象。
你真的需要销毁对象吗?为什么?Lua垃圾收集器难道没有正确地工作吗?难道没有另一种方法来设计对象之间的关系吗?
例如,在最简单的情况下,你可以通过collectgarbage(“collect”)
强制进行垃圾收集。垃圾收集将清理所有没有强引用的对象。如果你 真的想让变量消失,将它们保存在一个weak表中。当你分配对象时,Lua会自动进行垃圾收集(除非你停止它)。你还可以修改垃圾回收的速度。
2011-12-06 15:20:46
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
你无法进行显式的“删除”操作,因为 Lua 采用垃圾回收机制,与 C/C++ 不同。因此,你必须依赖垃圾回收机制;当用户不再需要该对象时,他们将控制该对象何时被废弃。当对象不再被引用时,它将被销毁。因此,尽管你可以显式地创建一个对象(虽然不应该这样称呼它),但不能显式地删除它。