【问题标题】:LUA: howto omit a value of a multi-value in a multiple-assignmentLUA:如何在多重赋值中省略一个多值的值
【发布时间】:2021-12-13 10:37:41
【问题描述】:

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

local a, _, b = f();

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

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

【问题讨论】:

  • 我不确定是否可行,但也许只是在下一行添加_ = nil 是最好的选择
  • @IvoBeckers 这绝对是最简单的解决方案。真正需要这样做的情况应该非常非常少。

标签: lua multiple-assignment


【解决方案1】:

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

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

然后像这样使用它

local a, b = firstAndThird(f());

【讨论】:

  • function firstAndThird(a,b,c) return a,c end 以避免创建表。
  • @lhf 是的,那就更好了。不知道为什么我没有想到这个哈哈。我将编辑我的答案以使其成为那样
【解决方案2】:

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

不,如果您需要第三个返回值,则无法省略该赋值。您只能通过_ 引用它来确保不保持返回的对象处于活动状态。当然,这只有在没有其他参考资料的情况下才会有所不同。

除了使用函数来限制_的作用域,你还可以使用do end

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

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

local a, _, c = f()
_ = nil

【讨论】:

  • 我认为一些换行符会大大改善你的代码。起初我没有得到你在第一个示例中使用的语法,直到我意识到如果我自己编写相同的代码,我会在几行上编写相同的代码。有时将所有内容放在一条线上可能会很好,但不应引起任何混乱。但是什么适合做单线当然有点主观。
  • @IvoBeckers 我每年唯一一次使用单班轮,你抓住了我:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-27
  • 1970-01-01
  • 1970-01-01
  • 2011-01-21
相关资源
最近更新 更多