我的 Lua 面向对象编程实现

我正在处理 Lua,试图让面向对象编程(OOP)工作,遇到了一些问题,但是在我的端上一切都正常,但我想知道是否还有其他问题,或者在使用此方法实现 OOP 时是否会出现意外问题。

基本上,我有一个基类

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

然后是一个子类

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

再次强调,一切正常,子类继承了基类中的所有成员,根据我的理解,方法基本上就是 Lua 中的变量,所以它也继承了方法,并且我可以添加特定的成员到子类中,并调用这些成员。因此,如果有更好的实现方法(但仍然相对轻量级),如果我会遇到一些意外问题或者我在做一些多余的事情,请让我知道。

点赞
用户2505965
用户2505965

你正在打破连接。从 ChildClass.new 返回的表将与 ChildClass 表没有任何关联。

你需要查看一下 《Programming in Lua》第16章,该章讨论了一种实现面向对象编程的典型方法。

归根结底,您需要使用隐式的 self,通过 : 符号,如果您想要保持链的连续性。 您不需要手动定义 ChildClass 构造函数,而是通过将其作为某种 instance 使其继承来自 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()
2016-11-02 12:57:14