如何改进一长串的elseif陈述?

时间:2011-02-27 17:13:38

标签: lua

我有大约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
    -- and so on.....
end

3 个答案:

答案 0 :(得分:8)

使用mark作为关键字创建一个表,其中每个元素都是一个包含四个参数的表(xyz,以及最后一个10代表)。然后,您的onSay方法可以作为表查找实现,然后使用已标识元素中的值调用moveTosendEffect。您仍然需要构建表,但是您可以从文件中读取它或将其移动到单独的模块中,因此它不会支配您的onSay方法。

答案 1 :(得分:1)

LUA缺少C风格的开关,我们讨论了这个问题here,建议您使用不同的方法。

也许此链接可能对您有所帮助。希望它能做到!

答案 2 :(得分:0)

如果我了解您尝试做的事情,可以尝试使用

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总是具有相同的值