在Lua中,我可以轻松选择没有自定义函数的第N个结果吗?

Rom*_*kov 5 string lua gsub lua-patterns lua-table

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

table.insert(tbl, mystring)
Run Code Online (Sandbox Code Playgroud)

mystring是通过将所有出现的"a"替换为"b"而生成的input:

mystring = string.gsub(input, "a", "b")
Run Code Online (Sandbox Code Playgroud)

将两者合并为一个语句的明显方法不起作用,因为gsub返回两个结果:

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

我想,这是为支持多种回报价而支付的价格.问题是,是否有一种标准的内置方式来选择第一个返回值?当我发现select我认为这正是它所做的,但是唉,它实际上从N开始选择所有结果,因此在这种情况下没有帮助.

现在我知道我可以自己定义select如下:

function select1(n, ...)
  return arg[n]
end

table.insert(tbl, select1(1, string.gsub(input, "a", "b")))
Run Code Online (Sandbox Code Playgroud)

但这看起来并不正确,因为我希望有一种内置的方式来做到这一点.

那么,我错过了一些内置构造吗?如果没有,Lua开发人员是否倾向于使用单独的变量来提取正确的参数或编写自己的select1函数?

int*_*jay 11

您可以用括号括起表达式:

table.insert(tbl, (string.gsub(input, "a", "b")))
Run Code Online (Sandbox Code Playgroud)

这将仅选择第一个结果.

要获得第n个结果,您可以使用select括号来包围它:

func1( (select(n, func2())) )
Run Code Online (Sandbox Code Playgroud)


deo*_*rst 5

将表达式放入括号中,如下所示:

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

将强制一个返回值.或者你可以像这样抓住他们:

str,cnt = string.gsub(input, "a", "b")
table.insert(tbl, str)
Run Code Online (Sandbox Code Playgroud)

甚至更好,虚拟抓住它来保存变量:

str,_ = string.gsub(input, "a", "b")
table.insert(tbl, str)
Run Code Online (Sandbox Code Playgroud)


Hal*_*Hal 5

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