博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lua屏蔽对象方法和恢复的方法
阅读量:5036 次
发布时间:2019-06-12

本文共 1119 字,大约阅读时间需要 3 分钟。

背景

对于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] = nilendfunction 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 = nilendsetHiddenProperty(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

 

转载于:https://www.cnblogs.com/lightsong/p/5879473.html

你可能感兴趣的文章
java学习之switch 等值判断
查看>>
hdu5036 Explosion 传递闭包
查看>>
WinXP下由于图标造成的System.Windows.Markup.XamlParseException
查看>>
解决错误提示unable to invoke code completion due to errors in source cord.
查看>>
比较smart的一条分页存储过程
查看>>
POJ1979-Red and Black
查看>>
leetcode 数据库题解
查看>>
文件打开对话框
查看>>
install docker on centos7
查看>>
mysql 查询条件中文问题
查看>>
svn
查看>>
父组件操作子组件中的值,将父组件的值设置给子组件
查看>>
配置SQL Server 2005 以允许远程连接
查看>>
LSTM学习理解资料
查看>>
Callable与Runable接口 submit与execute区别
查看>>
Obsidium V1.3.0.4 脱壳
查看>>
Linux make语法
查看>>
用户体验之认知地图、思维导图和概念图
查看>>
bzoj3389 [Usaco2004 Dec]Cleaning Shifts安排值班
查看>>
bzoj3173 [Tjoi2013]最长上升子序列
查看>>