900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > local多个 lua_lua实现多继承 - 达拉崩吧冬的个人空间 - OSCHINA - 中文开源技术交流社区...

local多个 lua_lua实现多继承 - 达拉崩吧冬的个人空间 - OSCHINA - 中文开源技术交流社区...

时间:2019-11-20 12:52:35

相关推荐

local多个 lua_lua实现多继承 - 达拉崩吧冬的个人空间 - OSCHINA - 中文开源技术交流社区...

lua对于面向对象的支持主要通过table来实现,每个table都是一个对象,对于继承,lua有元表的机制,通过setmetatble()可以来修改元表,

#元表是什么?

元表其实就是在本身找不到的东西,就会去元表中查找。

#__index元方法:

__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()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。