Lua中的逻辑运算符:与(and)、或(or)和非(not),与其他语言的逻辑运算符功能一致。但Lua中所有的逻辑运算符将false和nil视为假,其他任何东西视为真,0也视为真。
当连接2个操作数时:
- 对于运算符and来说,如果它的第一个操作数为假,就返回第一个操作数;不然返回第二个操作数;
print('a' and {1,2,3})
print(0 and 'b')
print(nil and 233)
print(233 and nil)
print(false and 'abcdfg')
print('abcdfg' and false)
output:
table: 0x8d4eb0
b
nil
nil
false
false
- 对于运算符or来说,如果它的第一个操作数为真,就返回第一个操作数,不然返回第二个操作数;
print('a' or {1,2,3})
print(0 or 'b')
print(nil or 233)
print(233 or nil)
print(false or 'abcdfg')
print('abcdfg' or false)
output:
a
0
233
233
abcdfg
abcdfg
- and连接多个操作数时,表达式的返回值就是从左到右第一个为假的值,若所有操作数值都不为假,则表达式的返回值为最后一个操作数;
print('a' and 'b' and 'c' and 'd' and nil and false and 'e' and 'f')
print('a' and 'b' and 'c' and false and 'd' and nil and 'e' and 'f')
output:
nil
false
- or连接多个操作数时,表达式的返回值就是从左到右第一个不为假的值,若所有操作数值都为假,则表达式的返回值为最后一个操作数;
print(nil or 'a' or 'b' or 'c' or 'd' or false or 'e' or 'f')
print('a' or nil or 'b' or 'c' or false or 'd' or 'e' or 'f')
print('a' or 'b' or nil or 'c' or false or 'd' or 'e' or 'f')
output:
a
a
a
- Lua中还会用到 "a and b or c ",这类似于C系语言中的表达式 a ? b : c: max = (a > b) and a or b
local a = 666
local b = 333
local c = true
print((a > b) and a or b)
print((a < b) and a or b)
print((not c) and 'false' or 'true')
output:
666
333
true