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
本文详细介绍了在Lua中实现多继承的方法,通过自定义元表和查找函数,展示了如何让一个类同时继承多个父类的属性和方法。此外,还讲解了构造函数和实例的创建过程。

1947

被折叠的 条评论
为什么被折叠?



