lua没有真正的三元运算符

lua是没有三元运算符的, 不像C语言, 可以直接这样

1
bool result = a ? b : c;

在lua中, 可以使用and or 在达到三元运算的效果

1
local result = a and b or c

但是, 如果使用过程中方法不当, bug就来了, 可以看看这个测试例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function get_false()
print("get false")
return false
end

function get_true()
print("get true")
return true
end

function condition()
return true
end

local result = condition() and get_false() or get_true()

这一段代码的运行结果:

1
2
get false
get true

而不是你预想中的

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 的逻辑, 所以就出现了这种情况