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

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开始的结果,因此在这种情况下无济于事。

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

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

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

但这看起来不正确,因为我期待一种内置的方式。

那么,我是否错过了一些内置的结构?如果没有,LUA开发人员倾向于使用单独的变量来提取正确的论点或编写自己的论点 select1 职能?

有帮助吗?

解决方案

您可以通过括号来包围表达:

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

这将仅选择第一个结果。

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

func1( (select(n, func2())) )

其他提示

将表达式放入这样的括号中:

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

将强制一个回报值。或者,您可以这样抓住他们:

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

甚至更好,虚拟捕获它以节省变量:

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top