表達式用於表示值。Lua的表達式中能夠包含數字常量、字面字符串、變量、一元和二元操做符及函數調用。區別於以往的,Lua的表達式中能夠包括函數定義和table構造式。函數
算術操做符lua
Lua支持常規的算術操做符有:二元的加(「+」)、減(「-」)、乘(「*」)、除(「/」)、指數(「^」)、取模(「%」);一元的負號(-),全部的這些操做均可用於實數。spa
其中取模操做符根據如下規則定義:a % b == a - floor(a / b) * b。code
對於整數來講,以上算式的計算結果的符號永遠與第二個參數相同。對象
對於實數來講,x % 1 = x 的小數部分;x - x %1 = x 的整數部分;相似地,x - x%0.01精確到小數點後兩位的結果。字符串
x = math.pi print(x - x%0.01) ------->3.14
關係操做符table
Lua提供了: < > <= >= == ~= 這些關係操做符。全部這些操做符的運算結果都是true或false。若是兩個值具備不一樣的類型,Lua就認爲他們是不相等的。不然,Lua會根據他們的類型來比較二者。這裏nil只與其自身相等。class
對於Table、userdata和函數,只有當他們引用同一個對象時,才認爲他們相等。變量
a = {} a.x = 1 a.y = 0 b = {} b.x = 1 b.y = 0 c = a 結果:a == c, a ~= b
Lua中只能對兩個數字或兩個字符串做大小性的比較。Lua按照字母次序比較字符串,具體的字母次序取決於對Lua的區域設置。數字和字符串以外的其餘類型只能進行相等或者不等性的比較。引用
邏輯操做符
邏輯操做符有and,or 和 not。與條件控制語句同樣,全部的邏輯操做符將false和nil視爲假,而將其餘的任何東西視爲真。
對於and來講,若是它的第一個操做數爲假,就返回第一個操做數;否則返回第二個操做數。
and是哪一個爲假就返回哪個,若是兩個都爲假就返回第一個假的。若是兩個都爲真就返回最後一個真的。
對於or來講,若是它的第一個操做數爲真,就返回第一個操做符;否則返回第二個操做數。
or是哪一個爲真就返回哪個,若是兩個都爲真就返回第一個真的,若是兩個都爲假就返回最後一個假的。
and 和 or 都使用」短路求值「,只會在須要時纔去評估第二個操做數。能夠確保("type(v) == "table" and v.tag == "h1"")
經常使用的Lua習慣寫法
"x = x or v" 等於 if not x then x = v end
字符串鏈接
Lua中連接兩個字符串,可使用操做符「..」,若是其任意一個操做數是數字的話,Lua會將這個數字轉換成一個字符串。
Lua中的字符串是不可變的值。鏈接操做符只會建立一個新的字符串,而不會對其原操做數進行任何修改。
a = "hello" print(a .. "world") --- >helloWorld print(a) ----> hello
優先級
Lua 操做符的優先級:
^ |
not # -(一元) |
* / % |
+ - |
.. |
< > <= >= ~= == |
and |
or |
二元操做中,除了指數操做符和連接操做符是「右結合」,全部其餘操做符都是「左結合」