lua的元表有什么好玩的
Posted 宋萌萌萌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lua的元表有什么好玩的相关的知识,希望对你有一定的参考价值。
local mt = getmetatable(window)
然后,我们修改元表里viewAppear对应的函数
--- 首先我们在元表中塞个表,来存放修改后的viewAppear函数的参数
mt.viewAppearFuncTable = {}
--- 获取viewAppear方法的指针
local oriViewAppear = mt["viewAppear"]
--- 将viewAppear指向我们自定义的方法
mt["viewAppear"] = function(_, func)
-- 对func做个校验,然后保存到viewAppearFuncTable中
if type(func) == "function" then
--- 因为viewAppearFuncTable是给元表添加的,所以window也可以访问到该字段
table.insert(window.viewAppearFuncTable, func)
end
end
--- 以上代码就完成了对viewAppear的重定义
--- 然后,设置真正的viewAppear回调,并对事件进行分发
oriAppear(window, function()
for _, f in ipairs(window.viewAppearFuncTable) do
if type(f) == "function" then f() end
end
end)
oriAppear(window, function() end
这个方法可能会让大家觉得很奇怪,因为通常我们使用window:viewAppear(func)时只有一个参数。为什么单独调用方法时会多一个参数呢?
实际上当我们通过一个函数指针调用函数时,相当于点调用,点调用时需要明确的将被操作对象作为第一个参数,所以这里多了一个参数window,因为我们想让window调用它原来的那个viewAppear方法。
MLN提供的对象以及创建的对象,都拥有元表
元表是一个普通的lua表
元表中通过k-v形式保存这个类拥有的方法
元表的内容为所有对象公用,任意对象可以直接访问(不会线程问题哈,这个以后再解释)
你可以对元表进行各种魔改(有一点要注意:不要把原来的东西弄丢)
以上是关于lua的元表有什么好玩的的主要内容,如果未能解决你的问题,请参考以下文章