local function search(k,plist)
for i=1,#plist do
local v = plist[i][k]
if v then return v end
end
end
function createClass(...)
local o = {}
local parents = {...}
setmetatable(o,{__index=function(t,k)
local v = search(k,parents)
t[k] = v
return v
end
})
o.__index = o
function o:new(p)
p = p or {}
setmetatable(p,o)
return p
end
return o
end
Named = {}
Named.a = 10
Tell = {}
Tell.b = 50
Acc = createClass(Named,Tell)
acc = Acc:new()
print(acc.b)多重继承的话就不能通过某一个类来创建新的类型了,需要通过第三方的方法来创建类,参数传入基类们,创建一个新的table,它的元方法为可以在基类们中搜索对应值的search方法,缓存基类方法到具体的table(缺点是运行时修改基类的方法不会向下传递了,优点是访问加快了),为新table(类)提供一个new方法来创建对象,就是设置新table类为新新table的元表的__index。