您好,登錄后才能下訂單哦!
Lua的表達式中可以包含數字常量、字面字符串、變量、一元和二元操作符及函數調用。表達式中還可以包括函數定義和table構造式。
+ 加 - 減 * 乘 / 除 ^ 指數 % 取模
加減乘除不必多說,與其他編程語言相同。在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
中,
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
中有以下關系操作符,用來進行比較操作:
< 小于 > 大于 <= 小于等于 >= 大于等于 == 等于 ~= 不等于
所有比較操作的結果都是true或false。需要注意以下幾點:
和其他大多數編程語言不同,不等于比較符為~=
,而不是!=
;
nil只與其自身相等;
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="h2"
這樣的表達式時不會導致運行錯誤;
同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}
。
和函數相關的內容我們放到之后的博客中進行講解,敬請關注。
完。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。