原创文章,欢迎转载,转载请注明:文章来自[寒江孤叶丶的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]()调用的是系统默认的函数没有输出内容)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。