【问题标题】:Lua ternary operator - multiple variablesLua 三元运算符 - 多个变量
【发布时间】:2014-08-18 23:55:43
【问题描述】:

假设如果某个条件为真,我想为两个变量分配两个值,如果所述条件为假,则为两个不同的值。我会假设它会这样做:

a, b = 4 > 5 and 1, 2 or 3, 4

但是,这将 a 分配为 false,将 b 分配为 2。 如果我们有:

a, b = 4 < 5 and 1, 2 or 3, 4

这正确地将 a 分配为 1,将 b 分配为 2。

我在这里缺少什么,我怎样才能让“三元运算符”按我的预期工作?

【问题讨论】:

  • 三元运算符不适用于值的元组,仅适用于单个值。但是您可以使用数组:a, b = unpack(4 &gt; 5 and {1,2} or {3,4})
  • 通常的“三元运算符”(之所以这么称呼是因为它需要三个操作数)的形式为expr1 ? expr2 : expr3。它也被称为“条件运算符”。 Lua 没有这样的操作符。
  • @KeithThompson x and y or z 是等价的,只要 y 不是 false 或 nil(通常不是这种情况)。

标签: lua ternary-operator


【解决方案1】:

您错过了 Lua 的 andor 是快捷方式,并且逗号在层次结构中较低。基本上这里发生的情况是,首先4 &gt; 5 and 1 被评估为false2 or 3 被评估为24 被忽略。在第二种情况下4 &lt; 5true,因此4 &lt; 5 and 11,其余的保持不变。

正如 Egor Skriptunoff 建议的那样,您可以这样做

a, b = unpack(4 > 5 and {1,2} or {3,4})

改为。

【讨论】:

  • 这只是解释了它为什么会这样。它没有提供解决方案。
  • 是的,没错。这些年来我的 Lua 有点生锈了,所以我不得不四处寻找与 cmets 中给出的相同的解决方案。
  • 顺便说一句:在这里使用普通的if ... then else end 构造会更有效,如果有任何顾虑的话。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-07
  • 1970-01-01
  • 2018-04-03
  • 1970-01-01
  • 2018-02-15
  • 2016-09-26
  • 2020-10-06
相关资源
最近更新 更多