local a = { x = 1, y = 0} local b = { x = 1, y = 0} if a == b then print("a==b") else print("a~=b") end ---output: a~=b
逻辑表达式
表达符
备注
and
逻辑与
or
逻辑或
not
逻辑非
Lua 中的 and 和 or 是不同于C/C++语言的。在C/C++语言中,and 和 or 只得到两个值 1 和 0,其中 1表示真,0 表示假。而 Lua 中 and和or 的执行结果返回的表达式的结果,而非true或者flase这类逻辑结果。也就是说:
a and b 如果 a 为 nil,则返回 a,否则返回 b;
a or b 如果 a 为 nil,则返回 b,否则返回 a。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
local c = nil local d = 0 local e = 100 print(c and d) nil print(c and e) nil >print(d and e) 100 >print(c or d) 0 >print(c or e) 100 >print(not c) true >print(not d) false
特别注意:
所有逻辑操作符将 false 和 nil 视作假,其他任何值视作真;
对于 and 和 or,“短路求值”;
对于 not,永远只返回 true 或者 false。
优先级
优先级(由高到低)
^
not # -
* / %
+ -
..
< > <= >= == ~=
and
or
1 2 3 4 5 6 7
local a, b = 1, 2 local x, y = 3, 4 local i = 10 local res = 0 res = a + i < b/2 + 1-->等价于res = (a + i) < ((b/2) + 1) res = 5 + x^2*8-->等价于res = 5 + ((x^2) * 8) res = a < y and y <=x -->等价于res = (a < y) and (y <= x)