继承
多重继承
一.
--遍历每一个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
--创建一个继承了多个类的类
function createClass (...)
local c = {} --新类
setmetatable(c, {__index = function (t, key)
return search(key, arg) --遍历每一个table,查找有没有key
end})
c.__index = c
--给新类添加构造函数
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)
--实例化对象
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})