使用和或逻辑运算符模拟三元运算符
在 lua 中,逻辑运算符 and
和 or
返回一个操作数作为结果而不是布尔结果。因此,尽管 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
构造。