Lua 學習筆記

2021-08-04 15:23:30 字數 1278 閱讀 2380

1、關於table

lua 中的 table 是python 中的 list 和 dict 的混合體。

t =
相當於:

t =
簡單的看,實際上完全相當於 python 中的 dict ,

不過實際對於鍵為整數的,是放在 list 中的,方便快速索引。當然基於節省記憶體的考量,對於跳躍的大整數鍵,依然是放在 dict 中。

比如上邊的 t[20] = 100 就是放在dict 當中,但是6, 7, 8 都是放在 list 當中。

於是, 對於

t =
#t 得到的長度為 4,也即 list 的長度,即匿名的 function 也是放在list 當中的。

所以有下邊的執行結果:

2、屬性的訪問

同 python 一樣,t.attr 的訪問形式最終都轉換為了 t["attr"] 的形式。

3、變數的作用域

lua 中的變數只有 local 和 global 兩種,不像 python ,有 local ,nonlocal,和 global。 而且 lua 的 local 和 global 不是通過 end 語句塊來界定的,而是用 local 關鍵字來申明的,否則都是 global 全域性變數。

function func(x) a = 2 print(x) end
在 func 函式執行之後,便有了全域性變數 a.

注意上邊當 func 函式執行之前,因為沒有執行 a = 2 這條語句,所以那時還不存在全域性變數 a. 另外,在 lua 中,所有的全域性變數都是存在 _g 這個 table 當中的,即每次對全域性變數 x 的訪問,實際都是 _g["x"] 的形式。所以對於不存在的全域性變數,得到的是 nil,而不是像 python當中的異常報錯。

4、物件導向

lua 的表的方法在用 : 進行定義時,含有隱藏的引數 self(不能在引數列表中顯示的寫出來,類似於 c++ 的 this 指標)。所以通過 「:」 定義的函式,在使用 「.」 點號來呼叫時,需要多傳乙個表示 self 的引數。所以使用 「:」 才是更好的模擬物件導向。

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學習筆記

lua users.org lua manual luagit chunkspy openresty nginx lua module lua 中值為nil時,相當於c語言的空指標,還是需要小心謹慎。table使用有幾個易錯點,請看下圖 local m m search key m result v...