Lua中多重继承的简单实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010996533/article/details/72183021


--多个table表中寻找对应key的值
function search(classes, key)
    for i = 1, #classes do
        local value = classes[i][key];
        if value ~= nil then
            return value;
        end
    end
end
local t1 = {name = "hehe"};
local t2 = {game = "who"};
print(search({t1, t2}, "game"));




--用于创建继承多类的子类
function createClass(...)
    local parents = {...};
    local child = {};
   
    -- 设置类的元表
    setmetatable(child, {
        __index = function(table, key)
            return search(parents, key);
        end
    })
   
    -- 给类新增一个new函数,用于创建对象
    function child:new()
        o = {};
        setmetatable(o, child);
        child.__index = child;
        return o;
    end
   
    -- 返回这个继承了多个类的子类
    return child;
end
--上述测试用例
    -- 一个精灵类
    TSprite = {}
    function TSprite:hello()
        print("谁跟你hello!");
    end
   
    function TSprite:new()
        o = {}
        setmetatable(o, self);
        self.__index = self;
        return o;
    end
   
    -- 一个子弹类
    TBullet = {}
    function TBullet:fire()
        print("别动,再动我就瞄不准了!");
    end
    function TBullet:new()
        o = {}
        setmetatable(o, self);
        self.__index = self;
        return o;
    end
   
    -- 继承了两个类的子类
    local BulletSprite = createClass(TSprite, TBullet);
   
    -- 子类的对象
    local bSprite = BulletSprite:new();
    bSprite:hello();
    bSprite:fire()

猜你喜欢

转载自blog.csdn.net/u010996533/article/details/72183021