lua中并没有 switch 语句,我们该怎么实现一个简单的 switch 呢
switch (c) {
case 'a': printf("aaa\n"); break;
case 'b': printf("bbb\n"); break;
case 'c': printf("ccc\n"); break;
case 'd': break;
case 'e': break;
default: printf("here is 'default' case\n"); break;
}
以上是对应的c代码,接下来我们用 lua 实现 它
它的核心原理,就是创建一个 trigger-action的表,就是说,这个表的 键 触发条件,值 是对应的动作,也就是函数,这样我们就相当于通过参数来索引表中对应的函数并执行,就能达到 switch 的效果了
下面就是我们的 trigger-action 表了
local switch_tbl = {
-- case 'a':
['a'] = function () print("aaa") end,
-- case 'b':
['b'] = function () print("bbb") end,
-- case 'c':
['c'] = function () print("ccc") end,
-- case 'd':
['d'] = function () end,
-- case 'e':
['e'] = function () end,
-- default:
__index = function (tbl, key)
print("here is 'default' case")
end
}
-- 设置元表,这样才能触发 `__index`,从而使 `default:` 标签生效
setmetatable(switch_tbl, switch_tbl)
然后是一个调用函数,就是获取表中对应的函数并执行
local function do_switch(tbl, trigger)
if tbl[trigger] and type(tbl[trigger]) == "function" then
tbl[trigger]()
end
end
下面是使用例子
do_switch(switch_tbl, 'a')
do_switch(switch_tbl, 'd')
do_switch(switch_tbl, 'z')

posted on
浙公网安备 33010602011771号