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')

1

 posted on 2025-05-11 20:30  Dylaris  阅读(249)  评论(0)    收藏  举报