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

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

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

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

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

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

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

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

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

當(dāng)左右值的數(shù)量不一致時,Lua會進(jìn)行下面的設(shè)定:
- 變量個數(shù) > 值的個數(shù):按變量個數(shù)補足nil
- 變量個數(shù) < 值的個數(shù):多余的值會被忽略
下面的例子可以展示這種設(shè)定:

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

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

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

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

我們可以通過以下實例來理解算術(shù)運算符的應(yīng)用:

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

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

接下來你需要完成下面的練習(xí):
新建三個變量s1、s2、s3
分別存入字符串?dāng)?shù)據(jù):str、abc、233,使輸出打印正確

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

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

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

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

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

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

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

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

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

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

6.5 string轉(zhuǎn)number
上面一節(jié)學(xué)習(xí)了如何將number轉(zhuǎn)成string,這一節(jié)我們來學(xué)習(xí)如何將string轉(zhuǎn)成number
比如下面的變量s,存儲的內(nèi)容是一個字符串,但是代表了一個數(shù)字,如何轉(zhuǎn)成number再與n相加計算呢?

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

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

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

我們可以通過以下實例來更加透徹的理解關(guān)系運算符的應(yīng)用:

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

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

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

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

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

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

我們整理一下,實際上if語句就是如下結(jié)構(gòu):

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

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

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

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

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

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

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