Lua中多重繼承的簡單實現
阿新 • • 發佈:2019-01-07
--多個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()