由Cocos2dx的部分代码引出的对Lua元表的认识
今天游戏后端还没有来,继续看Cocos2dx引擎代码,过程中结合伟哥(大学舍友到项目伙伴到现在的公司的技术部头头)写
的代码,引发了我对Lua元表的一点认识。。。
伟哥的代码:
1 -- 因为子类覆盖了父类同名方法,通过此方法获得父类方法 2 self.addChild_p = getmetatable(self).addChild
开始时搞不清getmetatable()是干啥的,怎么还高亮,查lua库,
意思是返回 参数object的__metatable(元表)。
通过下面博友的帖子了解元表的大概。。。
http://www.cnblogs.com/simonw/archive/2007/01/17/622032.html
贴出练习代码:
1 local a = {1, 2, 3, 4} 2 local b = {"a", "b", "c", "d"} 3 local c = {} 4 c.__add = function(opt1, opt2) 5 for i, v in ipairs(opt2) do 6 table.insert(opt1, v) 7 print(v) 8 end 9 return opt1 10 end 11 12 setmetatable(a, c) 13 t = a + b 14 for i, v in ipairs(t) do 15 print(i, v) 16 end
显示结果: