加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

[寒江孤叶丶的Cocos2d-x之旅_40]在LUA中模拟switch

发布时间:2020-12-14 16:37:46 所属栏目:百科 来源:网络整理
导读:原创文章,欢迎转载,转载请注明:文章来自[寒江孤叶丶的Cocos2d-x之旅系列] 博客地址:http://blog.csdn.net/qq446569365 这个东西其实没有什么难度,但是一个朋友跟我说他在面试时候居然遇到了“请用lua模拟Switch” 这道题……于是乎想起把自己之前写的拿

原创文章,欢迎转载,转载请注明:文章来自[寒江孤叶丶的Cocos2d-x之旅系列]

博客地址:http://blog.csdn.net/qq446569365

这个东西其实没有什么难度,但是一个朋友跟我说他在面试时候居然遇到了“请用lua模拟Switch” 这道题……于是乎想起把自己之前写的拿出来分享一下……

代码很简单:


_G.Switch = _G.Switch or {}
_G.Switch.SWITCH_METATABLE = { __index = function(t,k) if rawget(t,"default") then return rawget(t,"default")  else return function ()  end end end,__metatable = "请不要更改Switch的metatable" }
function _G.Switch:create()
    local switch = {}
    setmetatable(switch,_G.Switch.SWITCH_METATABLE)
    return switch
end

测试代码:


local switch = Switch:create()--创建一个table作为switch的功能
switch[1] = function()--给switch的每个case设置函数
    print("switch 1")
end
switch[2] = function()
    print("switch 2")
end
switch[3] = function()
    print("switch 3")
end
switch[4] = function()
    print("switch 4")
end
switch["default"] = function()
    print("switch default")
end
switch[1]() --将case的数值作为key调用table中的方法实现switch的模拟
switch[4]()
switch[3]()
switch[10]()
switch["default"] = nil  --把default的函数去掉
switch[11]() --这行将不会有任何输出


输出结果:

[LUA-print] switch 1

[LUA-print] switch 4

[LUA-print] switch 3

[LUA-print] switch default

(最后的switch[11]()调用的是系统默认的函数没有输出内容)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读