我的 Lua OOP 实现

My Lua OOP Implementation

我正在处理 Lua,试图让 OOP 工作,运行 遇到一些问题,一切都在我这边,但我想知道我是否遗漏了什么, 否则用这种方法实现oop会出现意想不到的问题

基本上我有底class

local BaseClass = {}
function BaseClass.new()
    local self = setmetatable({}, BaseClass)
    return self
end

然后是childclass

local ChildClass = {}
function ChildClass.new()
    local self = BaseClass.new()
    return self
end

同样,一切正常,childclass 继承了基础 class 的所有成员,据我所知,方法基本上是 lua 中的变量,所以它还继承了那些,然后我可以将特定成员添加到 childclass,并调用它们。所以如果它可以更好(但仍然相对轻量级),如果我遇到意外问题或者我正在做一些多余的事情,请告诉我。

你打破了链条。从 ChildClass.new 返回的 table 将与 ChildClass table.

没有关联

您需要查看 Chapter 16 of Programming in Lua,其中讨论了实现面向对象编程的典型方法。

归根结底,如果要维护链,则需要通过 : 描述符使用隐式 self。您不需要手动定义 ChildClass 构造函数,而是让它继承 BaseClass 的构造函数,方法是使其成为某种 实例

local BaseClass = {}

function BaseClass:new()
    self.__index = self
    return setmetatable({}, self)
end

local ChildClass = BaseClass:new()

现在您可以为 ChildClass.

的实例定义共享函数
function ChildClass:foo ()
    print('foo!')
end

local child_inst = ChildClass:new()
child_inst:foo()