【问题标题】:How to improve on a long chain of elseif statements?如何改进长链 elseif 语句?
【发布时间】:2011-07-05 07:27:27
【问题描述】:

我有大约 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

【问题讨论】:

  • 我对代码格式很感兴趣...主要是通过处理可以粘贴到框中但不能在框中键入的文字制表符。我还使标题更具体地针对手头的问题。

标签: lua


【解决方案1】:

使用mark 作为键创建一个表,其中每个元素是一个包含四个参数(x、y、z 以及最后一个10 代表的任何内容)的表。然后您的onSay 方法可以实现为表查找,然后使用已识别元素中的值调用moveTo 和sendEffect。您仍然需要构建表,但您可以从文件中读取它或将其移动到单独的模块中,这样它就不会支配您的 onSay 方法。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      如果我理解你想要做什么,你可以尝试使用

      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 始终具有相同的值

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-11
        • 2020-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多