lua对于面向对象的支持主要经过table来实现,每一个table都是一个对象,对于继承,lua有元表的机制,经过setmetatble()能够来修改元表, #元表是什么? 元表其实就是在自己找不到的东西,就会去元表中查找。 #__index元方法: __index方法是用来肯定一个表在被做为元表时的查找方法。它的值能够使函数也但是是table,通常用法为:函数
<!-- lang: lua --> local obj = {} setmetatable(obj, {__index = xx}) --这样便实现了obj实现继承自xx。
对于多继承,原理就是遍历多个父类的,代码以下:lua
<!-- lang: lua --> 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
结果输出:code
class1:print()对象
class2:print()继承