在學習一門語言的時候,運算符也是一項必要的單元,在用lua寫成的代碼中,必定會用到運算符,現在就lua的運算符做一下總結:
運算符一般分爲算術運算符,關係運算符和邏輯運算符,連接運算符
算術運算符:
二元運算符:+ - * / ^ (加減乘除冪)
一元運算符:- (負值)
這些運算符的操作數都是實數
關係運算符:
< > <= >= == ~=
這些操作符返回結果爲false或者true;==和~=比較兩個值,如果兩個值類型不同,Lua認爲兩者不同;nil只和自己相等。Lua通過引用比較tables、userdata、functions。也就是說當且僅當兩者表示同一個對象時相等
注意:Lua比較數字按傳統的數字大小進行,比較字符串按字母的順序進行,但是字母順序依賴於本地環境
爲了避免不一致的結果,混合比較數字和字符串,Lua會報錯,比如:2 < “15”
邏輯運算符:
and or not
邏輯運算符認爲false和nil是假(false),其他爲真,0也是true.
and和or的運算結果不是true和false,而是和它的兩個操作數相關。
a and b -- 如果a爲false,則返回a,否則返回b
a or b -- 如果a爲true,則返回a,否則返回b
print(4 and 5) --> 5
print(nil and 13) --> nil
print(false and 13) --> false
print(4 or 5) --> 4
print(false or 5) --> 5
--以此證明and和or返回的不是true或者是false,而是和兩個操作數相關
x = x or v --如果x爲false或者nil則給x賦初始值v
C語言中的三元運算符
a ? b : c
在Lua中可以這樣實現:
(a and b) or c
not的結果一直返回false或者true
print(not nil) --> true
print(not false) --> true
print(not 0) --> false
print(not not nil) --> false
連接運算符:
..
字符串連接,如果操作數爲數字,Lua將數字轉成字符串。
print("Hello " .. "World") --> Hello World
print(0 .. 1) --> 01
優先級:從高到低的順序
^
not - (unary)
* /
+ -
..
< > <= >= ~= ==
and
or