--遍歷每一個(gè)table墓拜,查找有沒有key
local function search (key, tables)
for i=1, table.getn(tables) do
local v = tables[i][key]
if v then return v end
end
end
--創(chuàng)建一個(gè)繼承了多個(gè)類的類
function createClass (...)
local c = {} --新類
setmetatable(c, {__index = function (t, key)
return search(key, arg) --遍歷每一個(gè)table,查找有沒有key
end})
c.__index = c
--給新類添加構(gòu)造函數(shù)
function c:new (o)
o = o or {}
setmetatable(o, c)
return o
end
--返回新類
return c
end
--Account 類
Account = {balance = 0}
--Named類
Named = {a = '123'}
function Named:getname ()
return self.name
end
function Named:setname (n)
self.name = n
end
--繼承Account和Named的類
NamedAccount = createClass(Account, Named)
--實(shí)例化對(duì)象
account = NamedAccount:new{name = "Paul"}
print(account:getname()) --> Paul
一種提高性能的方法:
setmetatable(c, {__index = function (t, k)
local v = search(k, arg)
t[k] = v -- save for next access
return v
end})