使用和或逻辑运算符模拟三元运算符

在 lua 中,逻辑运算符 andor 返回一个操作数作为结果而不是布尔结果。因此,尽管 lua 在语言中没有真正的三元运算符,但可以利用这种机制来模拟三元运算符的行为。

句法

condition truthy_expr falsey_expr

用于变量赋值/初始化

local drink = (fruit == "apple") and "apple juice" or "water"

在表构造函数中使用

local menu =
{
  meal  = vegan and "carrot" or "steak",
  drink = vegan and "tea"    or "chicken soup"
}

用作函数参数

print(age > 18 and "beer" or "fruit punch")

在 return 语句中使用

function get_gradestring(student)
  return student.grade > 60 and "pass" or "fail"
end

警告

在某些情况下,此机制不具有所需的行为。考虑这种情况

local var = true and false or "should not happen"

真正的三元运算符中,var 的期望值是 false。然而,在 lua 中,and 评估’落后’,因为第二个操作数是假的。结果 var 最终以 should not happen 结束。

这个问题的两种可能的解决方法,重构这个表达式,使中间操作数不是假的。例如。

local var = not true and "should not happen" or false

或者,使用经典的 if then else 构造。