我的Lua OOP实施

时间:2016-11-02 08:10:11

标签: class oop inheritance lua lua-table

我搞乱了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中的变量,所以它也继承了那些,然后我可以将特定成员添加到子类中,并调用它们。因此,如果它可能更好(但仍然相对轻量级),如果我遇到意外问题或者我做了多余的事情,请告诉我。

1 个答案:

答案 0 :(得分:1)

你打破了链条。从ChildClass.new返回的表格与ChildClass表格无关。

您需要查看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()