lua是没有三元运算符的, 不像C语言, 可以直接这样
1 | bool result = a ? b : c; |
在lua中, 可以使用and or 在达到三元运算的效果
1 | local result = a and b or c |
但是, 如果使用过程中方法不当, bug就来了, 可以看看这个测试例子
1 | function get_false() |
这一段代码的运行结果:
1 | get false |
而不是你预想中的
1 | get false |
给这一段代码加上括号, 你就明白发生什么了
1 | local result = (condition() and get_false()) or get_true() |
lua先执行了condition() and get_false()
true and false 的结果为false, 然后lua顺序执行后半部分的代码 false or get_true()
因为lua没有真正的三元运算, lua只是顺序的执行 and or 的逻辑, 所以就出现了这种情况