Lua面向对象的几种实现方式和技巧
1.实现类继承
思想是通过元表来实现类的函数,对象继承。比较简单,下面简单地实现一个继承类A的类B
local A = {
a = 0
}
A.__index = function(t,k)
if A.k then
return A[k]
end
log("find nothing")
end
function CreateClassFromA()
local temp = {}
setmetatable(temp,A)
return temp
end
2.实现多重继承
和类继承实现方法类似,不同的是元表的Index方法会从多个继承类中寻找方法。下面举个多重继承的例子
function search(k,plist)
for i=1,#plist then
if plist[i][k] then
return plist[i][k]
end
end
end
function CteateClass(...)
local c = {}
setmetatable(c,{__index = function(t,k)
return search(k,arg)
end}
)
c.__index = c
function c.new(o)
o = o or{}
setmetatable(o,c)
return o
end
return c
end
上面的代码创建了一个类c,类c作为一个继承了参数里所有table的类,可以调用c.new来实现类的实例化