代码之家  ›  专栏  ›  技术社区  ›  Roman Starkov

在Lua中,我可以不使用自定义函数轻松地选择第n个结果吗?

  •  5
  • Roman Starkov  · 技术社区  · 16 年前

    假设我在表中插入一个字符串,如下所示:

    table.insert(tbl, mystring)
    

    mystring 通过将中所有出现的“a”替换为“b”来生成 input :

    mystring = string.gsub(input, "a", "b")
    

    gsub 返回两个结果:

    table.insert(tbl, string.gsub(input, "a", "b"))  -- error!
    -- (second result of gsub is passed into table.insert)
    

    select 从N开始的结果,所以在这种情况下没有帮助。

    选择

    function select1(n, ...)
      return arg[n]
    end
    
    table.insert(tbl, select1(1, string.gsub(input, "a", "b")))
    

    但这看起来不对,因为我希望有一个内在的方式来做这件事。

    select1

    3 回复  |  直到 12 年前
        1
  •  11
  •   interjay    16 年前

    可以用括号将表达式括起来:

    table.insert(tbl, (string.gsub(input, "a", "b")))
    

    要得到第n个结果,可以使用 select 用括号括起来:

    func1( (select(n, func2())) )
    
        2
  •  5
  •   deorst    16 年前

    table.insert(tbl, (string.gsub(input, "a", "b")))

    str,cnt = string.gsub(input, "a", "b")
    table.insert(tbl, str)
    

    或者更好的方法是,用dummy捕捉它来保存一个变量:

    str,_ = string.gsub(input, "a", "b")
    table.insert(tbl, str)
    
        3
  •  5
  •   Hal    12 年前

    在一行中: ({ funct(args) })[n] 将返回第n个结果,而不声明任何命名变量。