中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Lua(二)——表達式

發布時間:2020-07-16 21:52:37 來源:網絡 閱讀:2412 作者:細桶假狗屎 欄目:開發技術

Lua的表達式中可以包含數字常量、字面字符串、變量、一元和二元操作符及函數調用。表達式中還可以包括函數定義和table構造式。

1. 算數操作符

1.1 二元算數操作符
+   加
-   減
*   乘
/   除
^   指數
%   取模

加減乘除不必多說,與其他編程語言相同。在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為非負整數

以這種方式保留小數不會出現進位的情況(即“五入”)。在其他語言中也可以使用這種方式,只是由于單精度浮點數存在四舍五入的問題,可能會造成一些誤差。在JavaScriptpython中,

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中的

+=
-=
*=
/+
%=

運算符,在編碼時需留意。

1.2 一元算數操作符
-   負號

2. 關系操作符

lua中有以下關系操作符,用來進行比較操作:

<   小于
>   大于
<=  小于等于
>=  大于等于
==  等于
~=  不等于

所有比較操作的結果都是true或false。需要注意以下幾點:

  1. 和其他大多數編程語言不同,不等于比較符為~=,而不是!=

  2. nil只與其自身相等;

  3. lua在比較操作時不會做自動轉型,類型不同的兩個值永遠不等。在遇到string和number比較時,lua會拋出錯誤;

  4. table/function/userdata三種類型是做引用比較的,即 a = {} a.x = 1 b = {} b.x = 1 print(a == b) -- false

3. 邏輯操作符

python完全相同,lua使用如下保留字作為邏輯操作符:

and 與
or  或
not 非

關于運算符要注意一下幾點:

  1. 在Lua(一)——類型與值我們就提到過,lua只將false和nil視為假,其他任何值包括0與空字符串都視為真;

  2. lua中的and/or為短路與和短路或,所謂短路,是指一旦邏輯判斷結果已定時不會繼續向后做判斷,這樣帶來的好處是在遇到type(v) == "table" and v.tag="h2"這樣的表達式時不會導致運行錯誤;

  3. 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

4. 操作符優先級

這里我們沒有列出操作符的優先級,也不建議去刻意記憶該優先級,任何情況下都建議使用()解決優先級問題,既不會出錯,又能提高代碼的可讀性。

5. table構造式

同樣,在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還有兩個類似“語法糖”知識點:

  1. 在table構造式的最后一個元素后寫逗號是合法、正確的,如tableDot = {[1]="red", [2]="green",}。這對于要生成table的lua程序來說很靈活,無需區別對待最后一個元素;

  2. 在table構造式中可以使用;來代替,,兩者作用完全等同,如tableSymbol = {name="Lucy";sex="male",age=20}

和函數相關的內容我們放到之后的博客中進行講解,敬請關注。

完。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

方城县| 色达县| 城市| 土默特右旗| 平遥县| 涿鹿县| 镇安县| 禄丰县| 通榆县| 盐池县| 蒙阴县| 藁城市| 巩义市| 全州县| 永仁县| 焉耆| 北京市| 呼和浩特市| 伊宁县| 潞城市| 当涂县| 邵武市| 河北区| 云林县| 五指山市| 思南县| 抚州市| 大港区| 达州市| 社旗县| 涞源县| 峡江县| 涞水县| 鹰潭市| 玉门市| 绥芬河市| 凤庆县| 松原市| 济南市| 绿春县| 元朗区|