【问题标题】:Assistance with Lua functions协助 Lua 功能
【发布时间】:2011-02-05 12:22:27
【问题描述】:

如前所述,我对 lua 比较陌生,但同样,我学得很快。上次我在这里得到帮助时,它对我帮助很大,而且我能够写出更好的脚本。现在我遇到了另一个我认为会让我的生活更轻松的问题。我不知道我在用函数做什么,但我希望有一种方法可以做我想做的事情。下面,您将看到一个我必须执行的代码示例,以去除一些不需要的元素。是的,我意识到它至少效率不高,所以如果其他人对如何使它更有效率有更好的想法,我会全力以赴。我想做的是用它创建一个函数,这样我就可以通过一个简单的调用来删除任何变量(比如stripdown(winds))。我感谢所提供的任何帮助,以及所提供的任何教训。谢谢!

winds = string.gsub(winds,"%b<>","")  
winds = string.gsub(winds,"%c"," ")  
winds = string.gsub(winds,"  "," ")  
winds = string.gsub(winds,"  "," ")  
winds = string.gsub(winds,"^%s*(.-)%s*$", "%1)")  
winds = string.gsub(winds,"&nbsp;","")  
winds = string.gsub(winds,"/ ", "(")  

乔什

【问题讨论】:

    标签: function lua


    【解决方案1】:

    这样应该会好一些:

    function stripdown(str)
        return (str:gsub("%b<>","")  
                   :gsub("[%c ]+"," ")  
                   :gsub("^%s*(.-)%s*$", "%1)")  
                   :gsub("&nbsp;","")  
                   :gsub("/ ", "("))
    end
    

    将 3 个模式减少到 1 个; 返回表达式周围的括号将输出减少为仅来自 gsub 的第一个返回值。

    【讨论】:

      【解决方案2】:

      对于这样的函数,我非常喜欢对象语法:

      function stripdown(winds)
          winds = winds:gsub("%b<>","")  
                       :gsub("%c"," ")  
                       :gsub("  "," ")  
                       :gsub("  "," ")  
                       :gsub("^%s*(.-)%s*$", "%1)")  
                       :gsub("&nbsp;","")  
                       :gsub("/ ", "(")  
          return winds
      end
      

      此版本的效率不高或不及其他版本,但语法噪音要少得多,而且我发现更容易看到发生了什么。

      不简单地返回大表达式有一个技术原因,那是因为gsub 返回两个结果。 将其分配给winds“调整”掉(不需要的)第二个结果,并且该函数仅返回字符串。

      【讨论】:

        【解决方案3】:

        把它变成一个函数是很容易的部分。

        function stripdown(winds)
            winds = string.gsub(winds,"%b<>","")  
            winds = string.gsub(winds,"%c"," ")  
            winds = string.gsub(winds,"  "," ")  
            winds = string.gsub(winds,"  "," ")  
            winds = string.gsub(winds,"^%s*(.-)%s*$", "%1)")  
            winds = string.gsub(winds,"&nbsp;","")  
            winds = string.gsub(winds,"/ ", "(")  
            return winds
        end
        

        编写的这个函数确实产生并放弃了很多中间字符串结果,这可能是一个相对昂贵的操作。几乎肯定值得仔细研究string.gsub() 及其pattern language 的文档。应该可以用更少的操作至少完成一些您指定的操作。

        【讨论】:

        • 是的,我希望减少它必须做的工作。我也知道如何做到这一点,但这绝对是朝着正确方向迈出的一步。谢谢!
        猜你喜欢
        • 1970-01-01
        • 2019-10-24
        • 2014-10-09
        • 2016-05-13
        • 2020-06-01
        • 2012-12-25
        • 2011-11-04
        • 2017-04-16
        • 2019-05-18
        相关资源
        最近更新 更多