lua中的逻辑运算符,认为只有false、nil为假,其他的都为真(包括0、空串)
a and b -- 如果a为false,则返回a,否则返回b
a or b -- 如果a为true,则返回a,否则返回b
1 print(4 and 5) --5 2 print(nil and 12) --nil 3 print(false and 13) --false 4 print(4 or 5) --4 5 print(false or 5) --5
一个很实用的技巧:如果x为false或者nil则给x赋初始值v
x = x or v
等价于
if not x then x = v end
C语言中的三元运算符
a ? b : c
在Lua中可以这样实现(《Programming in Lua》):
(a and b) or c
这样的实现其实有些问题,就是当 b 为 fasle 或者 nil 的时候,无论 a 为 true 还是 false ,运算结果都是返回的 c、
所以,正确的实现方式如下:
(a and {b} or {c})[1]
解释一下,{b} 、{c} 必然不会是 false 或者 nil。a 为 true ,返回 {b}, a为 false ,返回 {c},所以,表达式的返回结果必然是一个table,且这个table中只要一个元素,通过下标 1 直接访问即可。