初識 Lua
Lua 是一種輕量小巧的腳本語言,它用標準C語言編寫并以源代碼形式開放。這意味著什么呢?這意味著Lua虛擬機可以很方便的嵌入別的程序里,從而為應用程序提供靈活的擴展和定制功能。而整個Lua虛擬機編譯后僅僅一百余K,經過適當的裁剪還能做到更小,十分適合嵌入式的開發。
同時,在目前腳本引擎中,Lua的運行速度占有絕對優勢。這些都決定了Lua是作為嵌入式腳本的最佳選擇。
在我們編寫代碼之前,需要做一下準備,就是:確保你輸入標點符號時,用的不是中文輸入法。
一、第一個 Lua 程序
幾乎所有語言的第一行代碼,都是輸出hello world,本教程也不意外。
在Lua中,打印結果只需要使用print這個函數即可。同時,如果需要使用函數,只需要在函數名后加上雙括號,同時傳入你想傳入的值即可。
所以,我們來執行下面的代碼,打印出hello world吧!

二、輸出數據
上一部分,我們知道了,在Lua中,可以使用print函數來打印你想要得到的結果。
并且還知道了,函數是指可以實現某些功能的子程序,可以使用函數名(參數)來執行。
讓我們試著輸出一些其他東西吧!使用多個print函數,輸出自己想輸出的數據。

三、代碼注釋
代碼注釋就是在代碼里,不會運行的部分。注釋完全不會被運行。
這部分是為了在查看代碼時,可以更好地立即現有代碼含義用的。
我們可以用--開頭,來寫一段單行注釋
也可以用--[[開頭,]]結尾,寫一段多行注釋。
下面是注釋的例子:

四、變量
4.1 number變量
變量,可以看作是一個桶,在里面裝你想要裝的內容。這些內容可以是Lua包含的所有合法類型。
例如:我想要新建一個桶,名叫bucket,在里面放入233這個數字,就可以像下面一樣:

讓我們試著自己新建幾個變量吧!
新建變量year,并將變量的值設置為1926
新建變量month,并將變量的值設置為8
新建變量day,并將變量的值設置為7

4.2 了解nil
nil類型表示沒有任何有效值,只要是沒有聲明的值,它就是nil
比如我打印一個沒有聲明的值,便會輸出nil:

這里需要你思考一下,運行以下代碼,將會輸出什么結果?

4.3 賦值語句
賦值是改變一個變量值的最基本的方法。
如下面一樣,使用等號對左邊的變量進行賦值

Lua可以對多個變量同時賦值,變量用逗號分開,賦值語句右邊的值會依次賦給左邊的變量。

當左右值的數量不一致時,Lua會進行下面的設定:
- 變量個數 > 值的個數:按變量個數補足nil
- 變量個數 < 值的個數:多余的值會被忽略
下面的例子可以展示這種設定:

這里需要你思考一下,運行以下代碼,將會輸出什么結果?

4.4 交換變量
這部分需要你自己完成一個任務:
已知下面的代碼,并且已知a和b的值,請在交換他們的值,使打印輸出12 34

4.5 輸出變量
我們已經知道了,在Lua中,可以使用print函數來打印你想要得到的結果。
同時在上一節,我們學會了新建變量和設置變量的值。
讓我們試著輸出某個變量吧!使用print函數,輸出已知變量。 我們已知變量num為某個數字,試著輸出它的值吧!

4.6 算數運算符
運算符是一個特殊的符號,用于告訴解釋器執行特定的數學或邏輯運算。
上一節中,新建的數字變量,我們稱之為number類型的變量。
本節我們來學習使用算術運算符,如下所示:

我們可以通過以下實例來理解算術運算符的應用:

你需要完成下面的任務:
已知,一個長方體的長寬高分別為a、b、c(單位米),且這個物體重量為m(單位克)
請打印出物體的密度(單位g/m3)
注:密度計算公式 密度 = 質量 / 體積

六、字符串
6.1 string類型變量
字符串(即string),就是一串文本數據,可以存儲你要的文本。
在第二節中,print出的數據就是一個字符串。
Lua 語言中字符串可以使用以下三種方式來表示:
1. 單引號間的一串字符
2. 雙引號間的一串字符
3. [[和]]間的一串字符
你可以參考下面的例子來深入理解:

接下來你需要完成下面的練習:
新建三個變量s1、s2、s3
分別存入字符串數據:str、abc、233,使輸出打印正確

6.2 轉義字符
在上一節中,我們學習了如何聲明字符串。
但是我們有時候會遇到一些特殊的問題,如:如何輸出單引號和雙引號?如何輸出回車換行?
也許我們可以用下面的方式簡單規避,輸出單引號時,聲明字符串用雙引號括起來,像下面這樣

同理,輸出雙引號時,聲明字符串用單引號括起來,像下面這樣

但是,這樣會出現一個問題:如何同時顯示單引號和雙引號?這里就需要轉義字符登場了。
轉義字符用于表示不能直接顯示的字符,比如后退鍵、回車鍵、等。
以開頭的都是轉義字符,下面時常用的轉義字符格式:

例如,如果我們想給str賦值一個單引號,一個雙引號('"),那么我們可以這樣寫:

下面需要你來完成一個簡單的任務:
新建一個變量str,給str賦值為
abcd"ef'gh]]
并打印出來

6.3 string拼接
字符串和字符串可以相加嗎?可以!我們可以用拼接符號來將兩個獨立的字符串拼起來。
我們使用..來表示字符串拼接符號,如下面的示例代碼:

下面你要完成這個任務:
已知三個字符串變量s1、s2、s3
請將他們按順序拼接起來,存入all,并使用print輸出結果

6.4 number轉string
上面一節學習了如何拼接字符串,這個方法固然很好用,但是有時候我們會遇到一個需求,那就是把number類型的變量和string類型的變量拼接起來,組成一個新的string
比如下面的變量n和s,如何拼接起來呢?

我們可以直接將number類型的變量n轉換成string類型的值,這樣就可以拼接了
使用tostring(value)函數即可實現這一操作:

下面你要完成這個任務:
已知三個變量n1、s、n2
然后將他們按順序拼接起來,存入變量result,使輸出結果正確
小提示:在某些情況下,Lua會自動將number類型轉換成string類型

6.5 string轉number
上面一節學習了如何將number轉成string,這一節我們來學習如何將string轉成number
比如下面的變量s,存儲的內容是一個字符串,但是代表了一個數字,如何轉成number再與n相加計算呢?

我們可以直接將string類型的變量s轉換成number類型的值,這樣就可以計算了
使用tonumber(value)函數即可實現這一操作:

下面你要完成這個任務:
已知三個字符串變量s1、s2、s3,其內容均為純數字
請計算他們的算術和,賦值給新建的變量result,使下面代碼輸出正確結果

七、邏輯運算
7.1 布爾型和比較運算
布爾型(boolean)只有兩個可選值:true(真) 和false(假)
Lua 把 false 和 nil 看作是false,其他的都為true(包括0這個值,也是相當于true)
Lua 中也有許多的關系運算符,用于比較大小或比較是否相等,符號及其含義如下表:

我們可以通過以下實例來更加透徹的理解關系運算符的應用:

下面問題來了,運行以下代碼,將會輸出什么結果?請自行思考

7.2 邏輯運算符
邏輯運算符基于布爾型的值來進行計算,并給出結果,下表列出了 Lua 語言中的常用邏輯運算符:

我們可以通過以下實例來更加透徹的理解邏輯運算符的應用:

下面問題來了,運行以下代碼,將會輸出什么結果?

7.3 檢驗大小(自測題)
題目:如果已知number變量n,那么如果需要判斷n是否符合下面的條件:
3
以下四行判斷代碼,正確的是?
(返回true即表示變量n符合要求)

八、分支判斷
8.1 條件判斷
上面一節學習了布爾類型,那么這個需要用到哪里呢?我們需要用它來進行某些判斷。
在Lua中,可以使用if語句來進行判斷,如下面所舉例的代碼,可以判斷n是否為小于10的數:

我們整理一下,實際上if語句就是如下結構:

下面是你需要完成的事:
已知變量n,請判斷n是否為奇數,如果是,請給n的值加上1
如果你覺得有難度,請查看下面的提示:
求出n除以2的余數:n % 2
給n的值加上1:n = n + 1

8.2 多條件判斷
上面一節學習了簡單的if語句寫法,這一節我們來學習多條件分支語句
在Lua中,可以使用if語句來進行判斷,同時可以使用else語句,表示多個分支判斷

舉個例子,比如有一個數字n:
- 當它大于等于0、小于5時,輸出太小,
- 當它大于等于5、小于10時,輸出適中,
- 當它大于等于10時,輸出太大,
那么代碼就像如下這樣:

注意:else和elseif都是可選的,可有可無,但是end不能省略
下面是你需要完成的事:
已知變量n,請判斷n是否為奇數,
如果是,請給n的值加上1
如果不是,請將n的值改為原來的兩倍

8.3 判斷三角形合法性(自測題)
你需要使用前面幾章的知識,來完成下面的題目
已知三個number類型的變量a、b、c,分別代表三根木棒的長度
請判斷,使用這三根木棒,是否可以組成一個三角形(兩短邊之和大于第三邊)
如果可以組成,就打印出true
如果不可以,就打印false

8.4 if的判斷依據(自測題)
我們在前面了解到,Lua 把false和nil看作是false,其他的都為true(包括0這個值,也是相當于true)
那么問題來了,執行下面的代碼,將會輸出什么?

下篇繼續介紹哦~
審核編輯 黃宇
-
語法
+關注
關注
0文章
45瀏覽量
10646 -
Lua
+關注
關注
0文章
86瀏覽量
11453
發布評論請先 登錄
警惕兼容性陷阱:LuatOS-Air腳本在LuatOS中的運行異常分析
BTS50007-1LUA:高性能12V智能高端功率開關的深度解析
探索BTH50015 - 1LUA:高效智能高側功率開關的技術剖析
語法糾錯和testbench的自動生成
大彩講堂:VisualHMI-LUA教程-獲取和設置16位數據函數
程序編譯運行正常但是顯示語法錯誤,為什么?
Android 16更新亮點介紹
零基礎學習LuatOS編程:快速上手開發實戰教程!
LuatOS編程基礎教程:手把手帶你入門物聯網開發!
揭秘:硬件圈的光通信密碼——Lua+LED!
Lua基礎語法更新篇(上)
評論