如何改善长串的 elseif 语句?

我有大约100个这样的if语句,我能以更好的方式做吗?

function onSay (cid, words, param)
    mark = string.lower(param)
    if mark == "kojo" then
        moveTo(cid, {x=32838, y=31926, z=7})
        sendEffect({x=32838, y=31926, z=7}, 10)
    elseif mark == "habala" then
        moveTo(cid, {x=32838, y=31926, z=7})
        sendEffect({x=32838, y=31926, z=7}, 10)
    end
    -- 等等.....
end

原文链接 https://stackoverflow.com/questions/5134596

点赞
stackoverflow用户227466
stackoverflow用户227466

LUA 缺少 C 风格的 switch 语句,关于这个问题的讨论可以在 这里 找到,该页面提出了您可以使用的不同方法。

2011-02-27 17:28:49
stackoverflow用户5420
stackoverflow用户5420

使用 mark 作为键创建一个表,其中每个元素都是一个包含四个参数( xyz 和最后的 10 表示的任何东西)的表格。然后,您的 onSay 方法可以通过查找表格后调用 moveTosendEffect 来使用所识别元素的值。你仍然需要构建这个表,但你可以从文件中读取它或将它移入一个单独的模块中,以便它不会占据你的 onSay 方法。

2011-02-27 17:45:13
stackoverflow用户3529833
stackoverflow用户3529833

如果我理解你要做什么,你可以尝试使用以下代码:

function onSay (cid, words, param)
mark = param:lower()

if mark:search("kojo", "habala", "and", "so", "goes", "on")
 then
     moveTo(cid, {x=32838, y=31926, z=7})
     sendEffect({x=32838, y=31926, z=7}, 10)
end

当然,除非 moveTo 和 sendEffect 总是具有相同的值。

2014-04-13 22:07:39