Lua 中的逻辑操作符有 and, or, 以及 not。 和控制结构一样,所有的逻辑操作符把 false 和 nil 都作为假,而其它的一切都当作真。
and or not
逻辑运算符认为false和nil是假(false),其他为真,0也是true.
and和or的运算结果不是true和false,而是和它的两个操作数相关。
1a and b -- 如果a为false,则返回a,否则返回b 2a or b -- 如果a为true,则返回a,否则返回b
例子:
1print(4 and 5) --> 5 2print(nil and 13) --> nil 3print(false and 13) --> false 4print(4 or 5) --> 4 5print(false or 5) --> 5 6 7 10 or 20 --> 10 8 10 or error() --> 10 9 nil or "a" --> "a" 10 nil and 10 --> nil 11 false and error() --> false 12 false and nil --> false 13 false or nil --> nil 14 10 and 20 --> 20
一个很实用的技巧:如果x为false或者nil则给x赋初始值v
x = x or v
等价于:
1if not x then 2 x = v 3end
and的优先级比or高。
C语言中的三元运算符
a ? b : c
在LUA中可以这样来实现:
(a and b) or c
not的结果只返回false或者true
1print(not nil) --> true 2print(not false) --> true 3print(not 0) --> false 4print(not not nil) --> false