表達式表示值。在Lua中,表達式包括:數值常量、字符串字面值、變量、單目和雙目運算符,函數調用,也包括一些非傳統的函數定義和表結構。
1.算術運算符
Lua支持常規的算術運算符:'+', '-', '*', '/', '^', '%', '-'(負)。所有這些運算符都對實數起作用。舉個例子,x^0.5, 計算x的平方根, x^(-1/3),計算x的立方根的反數。
在Lua中,'%'運算符定義規則如下:
a%b == a - floor(a/b)*b
對整型參數來說,它表示常規的意義,結果跟第二個參數b符號相同。
對實數來說,它有一些額外的用途。例如,x%1 表示x的小數部分,x-x%1 表示x的整數部分。類似的,x-x%0.01 將x精確到小數點後2位。
2.關系操作符
Lua提供了如下關系操作符:
< > <= >= == ~=
所有這些操作符產生的結果都是true或者false
'=='檢查是否相等,'~='檢查是否不等。這兩個操作符可以作用於任意的兩個值。如果要比較的兩個值是不同的類型,那麼Lua認為它們是不等的。否則,Lua根據它們的類型來比較它們是否相等。特例,nil只等於它本身。
Lua根據引用來比較table, userdata, function,也就是說,只有二者是同一個對象的時候,它們才相等。例如:
a = {}; a.x = 1; a.y = 0
b = {}; b.x = 1; b.y = 0
c = a
執行下上面的代碼,你可以得到, a == c, 但是 a ~= b
我們把<, >, <=, >=成為order operator。
order operator只能應用於數值和字符串。Lua根據字母表順序來比較字符串的大小,字母表的順序由本地設置決定。非數值和字符串的值只能比較相等或者不相等,不能用於order operator。
當比較兩個不同類型的值時,你一定要小心:記住"0"和0是不同的。除此以外,2<15顯然是true的,但是"2"<"15"是false的(根據字母表順序比較)。為了避免不一致的結果,當你將string和number混合使用到order operator時,例如 2<"15",Lua會產生一個error。