Lua面向对象编程:如何调用超类的构造函数

我需要在 LUA 上面写 OOP 方式,参考了这个教程,但是不知道如何调用超类的构造函数。

-- 基类
setmetatable(BaseClass, {
  __call = function (cls, ...)
    local self = setmetatable({}, cls)
    self._value = '12345'
    return self
  end,
})

-- 派生类
setmetatable(DerivedClass, {
  __index = BaseClass, -- 这是让继承起作用的特殊设置
  __call = function (cls, ...)
    local self = ???
    -- 怎么在这里调用超类的构造函数?
    return self
  end,
})
function DerivedClass:haha()
  print(self._value)
  self._value = 0 -- Works on _value for example
  print(self._value)
end

-- 创建实例
instance = DerivedClass()
assert_not_nil(instance._value) -- instance._value always nil here...
instance:haha() -- print 12345 and print 0

我尝试了以下的代码: local self = setmetatable({}, BaseClass) 或者 local self = setmetatable({}, BaseClass())

但它们都不能起作用。

此外,如果我执行代码 DerivedClass(),参数 cls 是指什么?

点赞