lua中的 多继承
lua中多继承的实现是通过把__index设置为一个查找函数,然后lua的查找机制是会先从原表里去查,查不到就通过__index去 元表里查询,如果 __index是个函数 就执行函数,取得返回值;
因此,多继承可以通过把__index设置为一个查找函数 来实现;
function class(className,...)
local c={}
local parent={...}
c.className=className
local search=function (k,plist)
for i = 1, #plist do
local v=plist[i][k]
if v then
return v
end
end
end
setmetatable(c,{__index= function(t,k) --实现多继承
local v=search(k,parent)
--rawset(t,k,v)
t[k]=v
return v
end})
retutn c
end
以上是多继承的实现;
另外,OOP里还有构造函数的概念,以及实例的概念
这个构造函数 可以是自己预先定义为Ctor 函数
c.New=function (...) --创建 实例
local instance={}
setmetatable(instance, {__index=c})
instance.classType=c
if type(instance.ctor)=="function" then
instance:ctor(...)
end
return instance
end
以下是 全代码
function class(className,...)
local c={}
local parent={...}
c.className=className
local search=function (k,plist)
for i = 1, #plist do
local v=plist[i][k]
if v then
return v
end
end
end
setmetatable(c,{__index= function(t,k) --实现多继承
local v=search(k,parent)
--rawset(t,k,v)
t[k]=v
return v
end})
c.New=function (...) --创建 实例
local instance={}
setmetatable(instance, {__index=c})
instance.classType=c
if type(instance.ctor)=="function" then
instance:ctor(...)
end
return instance
end
return c;
end