代码之家  ›  专栏  ›  技术社区  ›  Josh

协助lua功能

  •  4
  • Josh  · 技术社区  · 15 年前

    如前所述,我对lua还比较陌生,但我学得很快。上次我在这里得到帮助,这对我帮助很大,我能写出更好的剧本。现在我又来了一个问题,我想这会让我的生活更轻松一些。我不知道我在用函数做什么,但我希望有一种方法来做我想在这里做的事情。下面,您将看到一个代码示例,我需要做的是删除一些不需要的元素。是的,我意识到它一点也不高效,所以如果其他人对如何提高效率有更好的想法,我会全神贯注。我想做的是用它创建一个函数,这样我就可以用它的一个简单调用(比如strip down(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,"/ ", "(")  
    

    乔希

    3 回复  |  直到 15 年前
        1
  •  2
  •   RBerteig Keith Adler    15 年前

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

    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 . 应该可以在更少的操作中至少执行一些指定的操作。

        2
  •  4
  •   daurnimator    15 年前

    这应该稍微好一点:

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

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

        3
  •  3
  •   Norman Ramsey    15 年前

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

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

    这个版本的效率并不比另一个版本高或低,但是语法噪音要小得多,而且我发现更容易看到发生了什么。

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