Lua學習筆記(更新中)

2021-08-20 02:53:32 字數 2067 閱讀 9205

and、or使用短路求值:

and 第一運算元為假,返回第一運算元

or 第一運算元為真,返回第一運算元

「..」連線兩個字串,若其中任意乙個運算元為數字的話預設轉為字串。

lua允許多重賦值,可以通過多重賦值實現swap兩個變數的功能。

local語句建立區域性變數,作用域為當前塊。

盡可能地使用區域性變數,避免將無用的名稱引入全域性變數。

使用do-end關鍵字顯式定義乙個塊。

數字型for

for var=exp1,exp2,exp3 do

《執行體》

end

var從exp1變化到exp2,每次變化以exp3為指定步長遞增var。

exp3可選,預設為1.

泛型for

泛型for迴圈通過乙個迭代器(iterator)函式來遍歷所有值。

ipairs函式迭代陣列,pairs函式迭代table元素,io.lines函式迭代檔案中的每行,string.gmatch函式迭代字串中的單詞。

泛型for在迴圈過程內部儲存了迭代期函式,實際上儲存三個值:乙個迭代器函式、乙個恆定狀態和乙個控制變數

變數列表的第乙個元素稱為「控制變數」,在迴圈過程中絕不會為nil,因為當它為nil時迴圈結束。

for做的第一件事情是對in後面的表示式求值,返回三個值,類似多重賦值,即只有最後乙個表示式會產生多個結果,並且只會保留前三個值,多餘的值會被丟棄,不足的會用nil補足。

注意迴圈變數是區域性變數;不應該對迴圈變數賦值;

lua允許函式返回多個結果。

若乙個函式呼叫是最後的乙個表示式,保留盡可能多的返回值。

若函式沒有返回值或者沒有返回足夠多的返回值,使用nil補充缺失的返回值。

若函式呼叫不是一系列表示式的最後乙個元素,只產生乙個返回值。

若函式呼叫作為另乙個函式呼叫的最後乙個實參是,第乙個函式的所有返回值都將作為實參傳入第二個函式。

return乙個函式呼叫將返回該函式的所有返回值。

將函式呼叫放入一對圓括號中,迫使其只返回乙個結果。

參數列中的3個點表示該函式可接受不同數量的實參。

表示式「…」類似於乙個具有多重返回值的函式,返回的是當前函式的所有變長引數。

遞迴呼叫非全域性函式時先定義乙個區域性變數再定義函式本身。

或者直接利用「local function foo()」形式定義,但這種方式對間接遞迴無效,必須使用明確的前向宣告。

自身不儲存任何狀態的迭代器,避免產生closure開銷。

ipairs和pairs均為無狀態迭代器。

將迭代器所有狀態打包為乙個table,儲存在恆定狀態中。

通常基於closure實現的迭代期會比乙個使用table的迭代器更為高效,因為建立乙個closure比建立乙個table更廉價,其次訪問「非區域性變數」比訪問table欄位更快。

dofile函式從lua檔案執行lua**塊。

loadfile不執行lua檔案**,只編譯lua**。

loadstring從乙個字串中讀取**,而非從檔案讀取。如果想實現dostring只需要直接呼叫loadstring返回值即可:

loadstring

(s)()

如果**中有語法錯誤,loadstring會返回nil,錯誤訊息會變成試圖呼叫乙個nil值,為定位錯誤,使用assert。

將loadstring用於字面字串是沒有意義的,因為**在每次呼叫loadstring時會重新編譯,效率低。

使用error函式來丟擲異常,使用pcall函式來捕獲異常,錯誤訊息可以表示出錯誤的型別或內容。

lua將關於協程的函式放置在名為coroutine的table中。函式create用於建立新的協程,引數為函式,建立後狀態為掛起。

使用resume函式啟動或者再次啟動乙個協程,將其狀態從掛起轉為執行。

使用yield函式讓乙個執行中的協程掛起,之後可以再次恢復其執行。

當協程執行完畢並已經返回,協程處於死亡狀態,如果通過resume恢復它的執行會返回false和錯誤資訊。

當乙個協程a喚醒另乙個協程b時,協程a處於特殊狀態——「正常」狀態。

Lua學習筆記 lua堆疊

首先了解一下c 與lua之間的通訊 假設在乙個lua檔案中有如下定義 hello.lua檔案 請注意紅色數字,代表通訊順序 1 c 想獲取lua的myname字串的值,所以它把myname放到lua堆疊 棧頂 以便lua能看到 2 lua從堆疊 棧頂 中獲取myname,此時棧頂再次變為空 3 lu...

lua學習筆記

近日時間比較充裕,學習一下lua語言,順便寫下筆記,方便以後加深學習。c c 呼叫lua動態庫及標頭檔案位址 用於c c 嵌入lua指令碼解析 也可以到或找適合自己的版本。一 hello world 哈哈,先使用經典的hello world帶進門 1.在 執行 鍵入cmd開啟dos視窗,並將當前目錄...

Lua 學習筆記

1 關於table lua 中的 table 是python 中的 list 和 dict 的混合體。t 相當於 t 簡單的看,實際上完全相當於 python 中的 dict 不過實際對於鍵為整數的,是放在 list 中的,方便快速索引。當然基於節省記憶體的考量,對於跳躍的大整數鍵,依然是放在 di...