lua实现多继承

lua对于面向对象的支持主要经过table来实现,每一个table都是一个对象,对于继承,lua有元表的机制,经过setmetatble()能够来修改元表, #元表是什么? 元表其实就是在自己找不到的东西,就会去元表中查找。 #__index元方法: __index方法是用来肯定一个表在被做为元表时的查找方法。它的值能够使函数也但是是table,通常用法为:函数

<!-- lang: lua -->
local obj = {}
setmetatable(obj, {__index = xx})   --这样便实现了obj实现继承自xx。

对于多继承,原理就是遍历多个父类的,代码以下:lua


<!-- lang: lua -->
local class1 = {}
function class1:new()
    local obj = {}
    setmetatable(obj, {__index= class1})
    return obj
end

function class1:print1()
    print("class1:print()")
end


local class2 = {}
function class2:new()
    local obj = {}
    setmetatable(obj, {__index= class2})
    return obj
end

function class2:print2()
    print("class2:print()")
end

function super(k, list)
    for i,v in ipairs(list) do
        local ret = v[k]
        if ret then
            return ret
        end
    end
end


local class3 = {}
function class3:new()
    local obj = {}
    local  base = {class1, class2}
    --t为调用的对象,k为方法名
    setmetatable(class3, {__index= function(t,k) return super(k, base) end})
    setmetatable(obj, {__index = class3})
    return obj
end

结果输出:code

class1:print()对象

class2:print()继承

相关文章
相关标签/搜索