标签:
lua对于面向对象的支持主要通过table来实现,每个table都是一个对象,对于继承,lua有元表的机制,通过setmetatble()可以来修改元表,
元表其实就是在本身找不到的东西,就会去元表中查找。
__index方法是用来确定一个表在被作为元表时的查找方法。它的值可以使函数也可是是table,一般用法为:
local obj = {}
setmetatable(obj, {__index = xx}) --这样便实现了obj实现继承自xx。
对于多继承,原理就是遍历多个父类的,代码如下:
local class1 = {}
function class1:new()
local obj = {}
setmetatable(obj, {__index= class1})
return obj
end
function class1:print1()
print("class1:print()")
end
local class2 = {}
function class2:new()
local obj = {}
setmetatable(obj, {__index= class2})
return obj
end
function class2:print2()
print("class2:print()")
end
function super(k, list)
for i,v in ipairs(list) do
local ret = v[k]
if ret then
return ret
end
end
end
local class3 = {}
function class3:new()
local obj = {}
local base = {class1, class2}
--t为调用的对象,k为方法名
setmetatable(class3, {__index= function(t,k) return super(k, base) end})
setmetatable(obj, {__index = class3})
return obj
end
结果输出:
class1:print()
class2:print()
标签:
原文地址:http://my.oschina.net/u/156466/blog/401576