码迷,mamicode.com
首页 > 其他好文 > 详细

lua实现多继承

时间:2015-04-14 23:34:21      阅读:351      评论:0      收藏:0      [点我收藏+]

标签:

lua对于面向对象的支持主要通过table来实现,每个table都是一个对象,对于继承,lua有元表的机制,通过setmetatble()可以来修改元表,

元表是什么?

元表其实就是在本身找不到的东西,就会去元表中查找。

__index元方法:

__index方法是用来确定一个表在被作为元表时的查找方法。它的值可以使函数也可是是table,一般用法为:


local obj = {}
setmetatable(obj, {__index = xx})   --这样便实现了obj实现继承自xx。

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



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

结果输出:

class1:print()

class2:print()

lua实现多继承

标签:

原文地址:http://my.oschina.net/u/156466/blog/401576

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!