Lua中实现类似三元运算符逻辑,如何输出预期的字符串结果?
Lua 三元运算符实现修正方案
你的代码问题出在逻辑运算符的求值逻辑上:Lua 里的and会返回第一个假值,若所有值为真则返回最后一个值;or则返回第一个真值,若全为假则返回最后一个值。
你写的(msg_v and result)中,msg_v是非空字符串(Lua 里属于真值),所以会继续计算result,最终这个子表达式返回result的布尔值true,再和msg_x做or运算时,因为true是真值,整个表达式就返回true,这就是你得到输出true的原因。
正确的写法要把判断条件放在and的首位,才能按预期返回对应消息:
result = true msg_v = "true!" msg_x = "false!" msg = result and msg_v or msg_x print(msg) -- 输出: true!
当result为true时,result and msg_v会返回msg_v(因为result为真,逻辑与会取后面的真值),后续or msg_x因前面已是真值,直接返回msg_v;当result为false时,result and msg_v返回false,or msg_x就会返回msg_x,完美模拟三元运算符result ? msg_v : msg_x的逻辑。
内容的提问来源于stack exchange,提问作者user123454321
相关产品推荐
相关产品推荐

