Skip to content

Latest commit

 

History

History
52 lines (46 loc) · 1022 Bytes

define-class.md

File metadata and controls

52 lines (46 loc) · 1022 Bytes

将饥荒里的Class定义简化后的一个小例子,有构造方法和继承功能

function Class(base, _ctor)
    local c = {}
    if type(base) == "function" then
        _ctor = base
        base = nil
    elseif type(base) == "table" then
        for i,v in pairs(base) do
            c[i] = v
        end
    end
    c.__index = c

    local mt = {}
    mt.__call = function(class_tbl, ...)
        print(1111, class_tbl, c, ... == nil)
        local obj = {}
        setmetatable(obj, c)
        if c._ctor then
           c._ctor(obj, ...)
        end
        return obj
    end
    c._ctor = _ctor
    setmetatable(c, mt)
    return c
end

------------------------------------------------------

local A = Class(function(self)
    self.a = "A"
end)
function A:Foo()
    print("foo", self.a)
end

local B = Class(A, function(self)
    A._ctor(self)
    self.b = "B"
end)
function B:Bar()
    print("bar", A.a, self.b)
end

A()
B()
B:Foo()
B:Bar()