如果我只想要函数f()的第一个和第三个值,我可以做以下操作:
local a, _, b = f();
由于_
是一个有效的名称,可能_
被分配了一个大表。
_
的赋值?(显然:如果_
超出范围,它将被gc'ed)。
不确定是否有帮助,但也许你可以定义一个辅助函数,如
function firstAndThird(a, b, c)
return a, c
end
然后像
一样使用local a, b = firstAndThird(f());
是否有一种方法可以省略这个赋值给_在上述情况下?
不,如果需要第三个返回值,则无法省略该赋值。您只能通过_
引用返回的对象来确保不使其保持活动状态。当然,这只有在没有其他引用的情况下才有区别。
除了使用函数限制_
的作用域外,还可以使用do end
local a,c
do
local _ a,_,c = f()
end
或者直接删除未使用的引用。
local a, _, c = f()
_ = nil