3

如果我只想要函数 f() 的第一个和第三个值,我可以执行以下操作:

local a, _, b = f();

由于_是一个有效的名称,可能_会被分配一个大表。

_在上述情况下,有没有办法忽略这个分配?(很明显:如果_超出范围,它将被 gc'ed)。

4

2 回答 2

4

不确定它是否有帮助,但也许您可以定义一个辅助函数,例如

function firstAndThird(a, b, c)
    return a, c
end

然后像这样使用它

local a, b = firstAndThird(f());
于 2021-10-28T08:39:36.457 回答
3

在上述情况下,有没有办法将这个赋值给 _ ?

不,如果您需要第三个返回值,则无法省略该分配。您只能通过_. 当然,这只有在没有其他参考的情况下才会有所不同。

除了使用函数来限制_范围之外,您还可以使用do end

local a,c
do
  local _ a,_,c = f()
end

或者您只需删除未使用的参考。

local a, _, c = f()
_ = nil
于 2021-10-28T09:34:19.277 回答