新到一家公司,接觸有些業務竟然直接通過伺服器,在nginx層面就完成了,主要是基於openresty和lua來實現的。打算深入了解一下這門神奇的語言。。。
為了嵌入應用程式中,從而為應用程式提供靈活的擴充套件和定製功能。
安裝1)mac
brew install lua
開發工具:
vscode + emmylua
基本使用:
資料型別:
lua 中有 8 個基本型別分別為:nil、boolean、number、string、userdata、function、thread 和 table。
字串:
字串由一對雙引號或單引號來表示。
數字:表示雙精度型別的實浮點數
布林值:
boolean 型別只有兩個可選值:true(真) 和 false(假),lua 把 false 和 nil 看作是 false,其他的都為 true,數字 0 也是 true
nil:
nil 型別表示一種沒有任何有效值,它只有乙個值 -- nil,例如列印乙個沒有賦值的變數,便會輸出乙個 nil 值:
type(x)==nil 結果為 false 的原因是因為 type(type(x))==string。
nil 作比較時應該加上雙引號""
字串:
字串由一對雙引號或單引號來表示。
也可以用 2 個方括號 "" 來表示"一塊"字串。
在對乙個數字字串上進行算術操作時,lua 會嘗試將這個數字字串轉成乙個數字:
字串連線符號:..
字串的長度:使用#放到變數前面 。 #str1
表:在 lua 裡,table 的建立是通過"構造表示式"來完成,最簡單構造表示式是{},用來建立乙個空表。也可以在表裡新增一些資料,直接初始化表
lua 中的表(table)其實是乙個"關聯陣列"(associative arrays),陣列的索引可以是數字或者是字串
不同於其他語言的陣列把 0 作為陣列的初始索引,在 lua 裡表的預設初始索引一般以 1 開始。
函式:在 lua 中,函式是被看作是"第一類值(first-class value)",函式可以存在變數裡
lua 中我們可以將函式作為引數傳遞給函式
lua函式可以返回多個結果值,比如string.find,其返回匹配串"開始和結束的下標"(如果不存在匹配串返回nil)
lua函式中,在return後列出要返回的值的列表即可返回多值
lua 函式可以接受可變數目的引數,和 c 語言類似,在函式引數列表中使用三點 ... 表示函式有可變的引數
lua 函式可以接受可變數目的引數,和 c 語言類似,在函式引數列表中使用三點 ... 表示函式有可變的引數。
可以通過 select("#",...) 來獲取可變引數的數量
執行緒:在 lua 裡,最主要的執行緒是協同程式(coroutine)。它跟執行緒(thread)差不多,擁有自己獨立的棧、區域性變數和指令指標,可以跟其他協同程式共享全域性變數和其他大部分東西。
執行緒跟協程的區別:執行緒可以同時多個執行,而協程任意時刻只能執行乙個,並且處於執行狀態的協程只有被掛起(suspend)時才會暫停。
userdata:
userdata 是一種使用者自定義資料,用於表示一種由應用程式或 c/c++ 語言庫所建立的型別,可以將任意 c/c++ 的任意資料型別的資料(通常是 struct 和 指標)儲存到 lua 變數中呼叫
變數:lua 變數有三種型別:全域性變數、區域性變數、表中的域。
lua 中的變數全是全域性變數,那怕是語句塊或是函式裡,除非用 local 顯式宣告為區域性變數。
區域性變數的作用域為從宣告位置開始到所在語句塊結束。
變數的預設值均為 nil。
應該盡可能的使用區域性變數,有兩個好處:
索引:對 table 的索引使用方括號 。lua 也提供了
t[i] t.i -- 當索引為字串型別時的一種簡化寫法 gettable_event(t,i) -- 採用索引訪問本質上是乙個類似這樣的函式呼叫
迴圈:迴圈型別
描述while 迴圈
在條件為 true 時,讓程式重複地執行某些語句。執行語句前會先檢查條件是否為 true。
for 迴圈
重複執行指定語句,重複次數可在 for 語句中控制。
repeat...until
重複執行迴圈,直到 指定的條件為真時為止
迴圈巢狀
可以在迴圈內巢狀乙個或多個迴圈語句(while do ... end;for ... do ... end;repeat ... until;)
迴圈控制語句
迴圈控制語句用於控制程式的流程, 以實現程式的各種結構方式。
lua 支援以下迴圈控制語句:
控制語句
描述break 語句
退出當前迴圈或語句,並開始指令碼執行緊接著的語句。
goto 語句
將程式的控制點轉移到乙個標籤處。
流程控制:
lua 程式語言流程控制語句通過程式設定乙個或多個條件語句來設定。在條件為 true 時執行指定程式**,在條件為 false 時執行其他指定**。
控制結構的條件表示式結果可以是任何值,lua認為false和nil為假,true和非nil為真。
要注意的是lua中 0 為 true:
運算子:
~= 不等於
判斷語句:
if condition then
todo1
else
todo2
end迴圈:
for k, v in pairs(table) do
todo
end
lua語法 基礎篇
1.注釋 單行注釋 類似於c 的 多行注釋 類似於c 的 2.語句 分隔符 分號或者空格,一般多行寫一起,建議用分號 語句塊 do end 賦值語句 a,b,c,d 1,2,3,4 global variables local a,b,c 1,2,3 local varialbes a,b b,a ...
Lua學習筆記(基礎篇)
常用運算子 變數命名 變數名和識別符號必須以下劃線或字母開頭。名稱的本身不能包含有除字母 數字或下劃線之外的其它字元。變數名區分大小寫。變數名不得為lua中的關鍵字。lua中的關鍵字 and break do else elseif false for function if in local ni...
lua學習之語句篇
修改乙個變數或者修改 table 中的乙個欄位的值 多重賦值,lua 先對等號右邊的所有元素進行求值,然後再賦值 值的個數小於變數的個數,那麼多餘的變數就置為 nil 初始化變數,應該為每乙個變數賦乙個初始值 收集函式的多個返回值 x,y y,x 變數交換 a i a j a j a i 值的個數小...