【问题标题】:Constructors and Destructors in Lua?Lua中的构造函数和析构函数?
【发布时间】:2021-02-08 04:11:54
【问题描述】:

我是 Lua 的新手,通过将它们与 Python 和 Java 等其他编程语言进行比较来学习一些概念。我知道Java和python都有构造函数和析构函数。但是我没有找到用纯 Lua 编写的。我已经看到了一些使用 C/C++ 和 Lua 作为构造函数的例子,但是有什么方法可以只用 Lua 语言制作构造函数和析构函数?

【问题讨论】:

  • 定义YourClass:new()函数并将其用作构造函数。如果您在析构函数中需要一些重要的东西,请使用 __gc 元方法。
  • 为了更清楚起见,你能举个例子吗?

标签: constructor lua programming-languages destructor


【解决方案1】:

构造函数是创建对象并返回它的任何函数。要定义析构函数,您需要一个带有__gc metamethod 的元表。 __gc 元方法将在对象被垃圾回收时或程序结束时调用。

local mt = {
  -- Destructor
  __gc = function(self)
    print('Garbage-collecting ' .. self.name)
  end,
}

-- Constructor
local function newObject(name)
  local o = {name = name}
  setmetatable(o, mt)
  return o
end

【讨论】:

  • 由于__gc 元方法被非确定性地调用(由垃圾收集器),因此更正确的术语是“终结器”。 Lua 5.4 中以to-be-closed variables__close 元方法的形式引入了析构函数
  • 是不是说在 Lua 5.4 之前没有实现析构函数,只有垃圾收集器来做这个工作?
  • @anu111:如果您希望在变量超出范围时立即调用析构函数,那么是的,在 Lua 5.4 中引入了待关闭变量。对于 5.4 之前的版本,__gc 可以完成相同的工作,因此它仍然比普通的自动垃圾收集功能更多,但您无法控制何时调用 __gc
猜你喜欢
  • 2013-07-07
  • 2016-09-09
  • 1970-01-01
  • 1970-01-01
  • 2011-04-03
  • 2010-12-16
  • 2011-12-27
  • 1970-01-01
  • 2010-10-05
相关资源
最近更新 更多