lua 學習總結

Mr_Ace發表於2018-08-28
1、table在初始化構建的時候,需要使用 []中括號進行宣告值的鍵值。在沒有新增鍵值情況下,預設鍵值是從1開始,並且以此往後遞增。(使用#表名,只能獲取是以數字為鍵值的長度)

2、在遍歷table表的時候,#表名 ----只會獲取表中從1開始到結束是數字,要求是數字是連續下去 、ipairs(表名)----只會獲取從1開始連續不斷的鍵值資料。ipairs的作用是保證輸出的值是按照從數值鍵值排序輸出table資料的值。而Pair是的作用是保證資料中的每一個值都能夠輸出,但是循序是根據hash的循序進行輸出。

3、table在賦值的之後,資料之間的循序會根據hash值來進行排序。所有對應的輸出結構會發生改變。導致的結果是對應的輸出結構發生改變。

4、table.maxn(表名),在lua5.3中已經沒有該方法的使用

5、lua中只將false、nil當作是false進行處理,其他都視為true。

6、and、or 邏輯操作符有別於其他語言。這兩個操作符返回的是運算中的結果值。例子:2 or 5 --2
2 and 5 --5

7、local tab ={x=1,y=z} 在這裡x 、y 會被當做 是字串處理,與外界變數不關。
local tab ={[x]=1,y=z} 在這裡x是被當做外層變數名進行處理。但是對於這兩個的初始化構建table的時候,z變數時使用上層的環境變數來進行使用。

8、多重賦值的長應用於,變數值的交換;函式返回多個變數值,用多個變數來獲取相應的函式返回的結果值。

9、迴圈for 、while、repeat……until 。在這三個迴圈語句中,for迴圈又分為數字型for、泛型for的使用.

10、math.random(x[,y]) 該方法產生在xy之間的數字,但是在math.randomseed(z)設定隨機種子,如果設定相同的隨機種子就會每次執行math.random(x[,y]) 產生相同的數。一般採用當前的 時間的倒敘的6位數進行相應的種子設定。math.randomseed(tostring(os.time()):reverse():sub(1,6))

11、在函式多重返回值的時候,會自動匹配要賦值的數值;但是在函式呼叫的時候,函式後面還有值的情況,函式只會返回前一個值。

12、select(“index”,...),在可變引數...中可以是nil ,如果獲取可變引數的長度,寫法select(“#”,...),nil 也會算入長度。

13、pcall(x) ,其中x的引數名是一個定義的引數名字,該函式就會自動呼叫該函式。例子:local status ,err = pcall(function() x = "a"+1 end) 在執行時產生的錯誤會被pcall()函式捕獲到。並且列印錯誤資訊。在這過程中執行時程式丟擲了一個錯誤。而 error() 函式就有丟擲錯誤的作用。

14、協程:協程有四個狀態(suspended、running、normal、dead)。當呼叫coroutine.create(函式),該協程的狀態就是suspended、當呼叫coroutine.resume(協程),該協程的狀態就會變成running狀態(如果在協程執行的時候呼叫了其他協程,該協程的狀態就會變成相應的normal,但是當其他協程結束是時候就會繼續執行當前協程裡面的動作),當協程執行完成之後,協程的狀態就會進入dead。只要協程進入dead狀態後,coroutine.resume(協程)就沒有用。因為該協程已經死了,不能被喚醒了。