Lua的表達式中能夠包含數字常量、字面字符串、變量、一元和二元操做符及函數調用。表達式中還能夠包括函數定義和table構造式。python
+ 加 - 減 * 乘 / 除 ^ 指數 % 取模
加減乘除沒必要多說,與其餘編程語言相同。在lua
中能夠用^
計算指數:編程
print(4 ^ 2) -- 16 print(4 ^ 1 / 2) -- 2
%
用於取模,和其餘語言並無不一樣。在lua
中可使用以下方式決定保留幾位小數:編程語言
num = math.pi -- 3.1415926535898 print(num - num % 1) -- 3 整數部分 print(num - num % 0.01) -- 3.14 保留兩位小數 print(num - num % 1e-N) -- 保留N位小數,N爲非負整數
以這種方式保留小數不會出現進位的狀況(即「五入」)。在其餘語言中也可使用這種方式,只是因爲單精度浮點數存在四捨五入的問題,可能會形成一些偏差。在JavaScript
與python
中,ide
num = 3.1415926535898 // JavaScript num.toFixed(N) // 保留N位小數,N爲非負整數,默認N=0,自動四捨五入 Math.round(num * 1e+N) / 1e+N // 保留N位小數,N爲非負整數,自動四捨五入 # python round(num, N) # 保留N位小數,N爲非負整數,默認N=0,自動四捨五入 "%.Nf" % num # 保留N位小數,N爲非負整數,自動四捨五入
另外,在lua
中沒有C
/C++
/Java
/JavaScript
/Python
中的函數
+= -= *= /+ %=
運算符,在編碼時需留意。編碼
- 負號
lua
中有如下關係操做符,用來進行比較操做:lua
< 小於 > 大於 <= 小於等於 >= 大於等於 == 等於 ~= 不等於
全部比較操做的結果都是true或false。須要注意如下幾點:spa
和其餘大多數編程語言不一樣,不等於比較符爲~=
,而不是!=
;code
nil只與其自身相等;blog
lua
在比較操做時不會作自動轉型,類型不一樣的兩個值永遠不等。在遇到string和number比較時,lua
會拋出錯誤;
table/function/userdata三種類型是作引用比較的,即 a = {} a.x = 1 b = {} b.x = 1 print(a == b) -- false
與python
徹底相同,lua
使用以下保留字做爲邏輯操做符:
and 與 or 或 not 非
關於運算符要注意一下幾點:
在Lua(一)——類型與值咱們就提到過,lua
只將false和nil視爲假,其餘任何值包括0與空字符串都視爲真;
lua
中的and/or爲短路與和短路或,所謂短路,是指一旦邏輯判斷結果已定時不會繼續向後作判斷,這樣帶來的好處是在遇到type(v) == "table" and v.tag="h1"
這樣的表達式時不會致使運行錯誤;
同python
相同,lua
中沒有C
/Java
/JavaScript
中的三目運算符(max = a > b ? a : b
),如想達到三目運算符的效果,經過以下方式實現便可:
# python max = a if a > b else b -- lua max = (a > b) and a or b -- 此狀況下a必須爲真,不然實現不了三目運算符的功能 if a > b then max = a else max = b end
這裏咱們沒有列出操做符的優先級,也不建議去刻意記憶該優先級,任何狀況下都建議使用()
解決優先級問題,既不會出錯,又能提升代碼的可讀性。
一樣,在Lua(一)——類型與值咱們就提到過lua
中table類型的初始化及賦值方法,但初始化及賦值table遠不止一種方式,如下方式均是合法、正確的:
tableBlank = {} tableBlank.hobbies = {"basketball", "ping-pong", "volleyball"} tableBlank["school"] = "BIT" tableBlank[-100] = -100 -- 這種方式可使用負數/特殊符號做爲key tableBlank["+"] = "add" print(tableBlank.hobbies[1]) -- basketball print(tableBlank[-100]) -- -100 print(tableBlank["+"]) -- add tableWeek = {"Sunday", "Monday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"} for i = 1, #tableWeek do print(tableWeek[i]) end --[[ Sunday Monday ... Saturday --]] tableMixed = {name="Tom", sex="male", age=20, 176, 64.5, [0]="zero"} print(tableMixed.name) -- Tom print(tableMixed.sex) -- male print(tableMixed[1]) -- 176 print(tableMixed[0]) -- zero
除了初始化及賦值,關於table還有兩個相似「語法糖」知識點:
在table構造式的最後一個元素後寫逗號是合法、正確的,如tableDot = {[1]="red", [2]="green",}
。這對於要生成table的lua
程序來講很靈活,無需區別對待最後一個元素;
在table構造式中可使用;
來代替,
,二者做用徹底等同,如tableSymbol = {name="Lucy";sex="male",age=20}
。
和函數相關的內容咱們放到以後的博客中進行講解,敬請關注。
完。