• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Lua屏蔽对象方法和恢复的方法

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

对于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

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
基于Lua的游戏服务端框架简介发布时间:2022-07-22
下一篇:
cocos2d lua 将一张小图 九宫格拉伸的处理方法发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap