LUA:如何在多重赋值中省略多值的一个值

如果我只想要函数 f() 的第一个和第三个值,可以这样做:

local a, _, b = f();

由于“_”是一个有效的名称,也许“_”被分配了一个大表。

在上面的情况下,有没有一种省略这个赋值给“_”的方法?(明显的是:如果“_”超出范围,它就会被 gc'ed)。

原文链接 https://stackoverflow.com/questions/69750481

点赞
stackoverflow用户1514861
stackoverflow用户1514861

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

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

然后像下面这样使用它

local a, b = firstAndThird(f());
2021-10-28 08:39:36
stackoverflow用户2858170
stackoverflow用户2858170

有没有一种方法可以在上述情况下省略对_的赋值?

如果你需要第三个返回值,那么没有方法可以省略该赋值。你只能通过_来确保不保留返回的对象。当然,只有没有其他引用时才会起作用。

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

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

或者你可以直接删除未使用的引用。

local a, _, c = f()
_ = nil
2021-10-28 09:34:19