Lua屏蔽对象方法和恢复的方法
背景
对于OO思想实现的类, 对于某些场景需要屏蔽某些方法, 不让调用。过了这段场景, 就恢复这些类的方法, 可以调用。
例如:
工厂具有开工方法, 但是在晚上不允许开工, 所有在晚上这段时间, 见开工方法屏蔽掉, 到第二天早上八点将此方法恢复。
实现
local tab = { new = function() print("new is called.") end, delete = function() print("delete is called.") end, } tab.new() tab.delete() function setHiddenProperty(tab, name) if not tab[name] then return end if not tab.__hiddenProps then tab.__hiddenProps = {} end local hiddenProps = tab.__hiddenProps hiddenProps[name] = tab[name] tab[name] = nil end function restoreHiddenPorpertys(tab) local hiddenProps = tab.__hiddenProps if not hiddenProps then return end for k,v in pairs(hiddenProps) do tab[k] = v end tab.__hiddenProps = nil end setHiddenProperty(tab, "new") setHiddenProperty(tab, "delete") -- this time call new and delete will throw error --tab.new() --tab.delete() restoreHiddenPorpertys(tab) tab.new() tab.delete()
LOG:
>lua -e "io.stdout:setvbuf 'no'" "luatest.lua"
new is called.
delete is called.
new is called.
delete is called.
>Exit code: 0
出处:http://www.cnblogs.com/lightsong/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步