初識Lua語言

2021-10-02 19:16:59 字數 2870 閱讀 4931

lua語言從一開始就被設計為能與c/c++及其他常用語言開發的軟體整合在一起使用的語言。lua語言作為一門膠水語言,支援元件化的軟體開發方式,通過整合已有的高階元件可以輕鬆構建新的應用。在軟體中颱化開發模型中,lua勢必會扮演十分重要的角色。

當然,lua還有其他特性和優點, lua的運用場合也有其他,這裡就不再贅述,接下來進入正題。

學習lua語言還是從helloworld開始。在linux環境中:

或者你將列印「helloworld」的**儲存在本地檔案hello.lua中,然後執行它:

我們可以直接在互動模式下執行解析器:

接下來我們輸入的每一條表示式然後回車後將立即執行。需要注意的是,從lua5.3版本開始我們可以直接在互動模式下輸入表示式,lua會輸出表示式的值:

但在lua5.3之前的版本需要在表示式前面加上乙個等號:

當然了,為了向下相容,lua5.3版本也支援表示式前面加等號的語法。

說明:我的環境中/usr/local/bin/lua是5.3版本的lua,/usr/bin/lua是5.1.4版本的lua。預設是執行/usr/local/bin/lua。另外,同樣是15的平方,5.3版本的lua運算結果是225.0,在這之前的版本是225,這個跟版本的預設數值型別有關,後續會介紹。

lua  [options]  [script  [args] ]
表明所有的引數都是可選的,我們可以使用-i選項讓lua解析器執行完指定的chunk後進入互動模式:

呼叫dofile函式,該函式會立即執行乙個檔案:

如上,1_hello.lua定義了函式hello(),我們通過dofile()載入後再呼叫該函式。

-e選項允許我們直接在命令列輸入**:

-l選項用於載入庫:

庫**位於1_hello.c中,使用-l選項時不需要加上.lua字尾。

lua程式可以通過預先定義的全域性變數arg去解析器傳入的使用者引數,例如:

$  lua  test.lua  a  b  c
解析器在執行**前建立乙個名為arg的表,其中儲存了所有命令列引數,索引0中儲存的內容為指令碼名稱,索引1中儲存的內容為a,以此類推;在指令碼名稱之前的所有選項則位於負數索引值之上,如:

$  lua  -e  「sin=math.sin」  test.lua  a  b  c
解析器獲取引數:

arg[-3]= 「lua」

arg[-2]= 「-e」

arg[-1]= 「sin=math.sin」

arg[0]= 「test.lua」

arg[1]= 「a」

arg[2]= 「b」

arg[3]= 「c」

c/c++中定義乙個變數必須指明該變數的型別(以讓編譯器明確該變數佔據的記憶體大小),但在lua中卻不需要該指明。lua語言是一種動態型別語言,在這種語言中變數不需要定義型別,不過每個值還是帶有其自身的型別資訊。

lua有8種基本型別:

nil(空)、number(數值)、boolean(布林)、string(字串)、userdata(使用者資料)、function(函式)、thread(執行緒)、table(表)。函式type()可以獲取乙個值對應的型別名稱:

nil和boolean比較簡單,下面簡單介紹下這兩種型別。lua中的變數沒有預定義的型別,任何變數可以包含任何型別的值:

使用未經初始化的全域性變數也不會導致報錯,當使用未初始化的全域性變數時得到結果是nil;lua使用nil來表示無效值,把nil賦給全域性變數時lua會**該全域性變數。不過,我們不提倡將乙個變數用作不同型別,因為會降低**的可讀性。

boolean型別的值只具有兩個取值情況,即true和false,需要注意的是,lua中將boolean值false和nil外的所有值都視為真,零值和空字串也被視為真。

lua支援常見的邏輯運算子:and、or和not。and的運算結果是:若表示式的第乙個運算元為「false」則返回第乙個運算元,否則返回第二個運算元;or的運算結果是:如果表示式的第乙個運算元不為false則返回第乙個運算元,否則返回第二個運算元。例如:

跟c/c++類似,lua的and和or也支援短路原則,即只有在必要時才對第二個運算元進行求值。

not運算子永遠返回boolean型別的值:

其他型別,下文總結。

初識lua協同程式

協程類似與執行緒,但與執行緒不同,執行緒可以多個執行緒同時執行,但是協程需要彼此協作的執行,乙個具有多個協程的程式任意時刻只能執行乙個協程,並且在執行協程只會在其顯示地要求掛起時,才會暫停。乙個協程有4種不同的狀態 掛起,執行,死亡和正常。建立乙個協程時,他處於掛起狀態。coroutine.stat...

Lua初識之值型別 四

lua 是動態型別語言,變數不需要型別定義 8中型別如下 userdata print type hello world string print type 10 number print type print function print type type type string print t...

Lua初識之函式 十

lua初識之函式 a 表 a 將列印函式 print 賦值給 p a.p hello world 呼叫 a.p 函式既 print函式 b 表 b 引數 pp 賦值為 5 print b.pp 呼叫 pp 的值 m print m.num print m.numm print m.nummm fun...