Lua 是一種輕量小巧的腳本語(yǔ)言,用標(biāo)準(zhǔn) C 語(yǔ)言編寫(xiě)并以源代碼形式開(kāi)放恨搓,其設(shè)計(jì)目的是為了嵌入應(yīng)用程序中蝗茁,從而為應(yīng)用程序提供靈活的擴(kuò)展和定制功能。Lua 可以應(yīng)用在游戲開(kāi)發(fā)党晋、獨(dú)立應(yīng)用腳本谭胚、Web 應(yīng)用腳本、擴(kuò)展和數(shù)據(jù)庫(kù)插件未玻、安全系統(tǒng)等場(chǎng)景灾而。
特性
- 輕量級(jí):標(biāo)準(zhǔn)C語(yǔ)言編寫(xiě)并以源代碼形式開(kāi)放,編譯后僅僅一百余K
- 可擴(kuò)展:Lua提供了非常易于使用的擴(kuò)展接口和機(jī)制
- 支持面向過(guò)程編程和函數(shù)式編程
- 自動(dòng)內(nèi)存管理扳剿;只提供了一種通用類型的表(table)旁趟,用它可以實(shí)現(xiàn)數(shù)組,哈希表舞终,集合轻庆,對(duì)象
- 語(yǔ)言內(nèi)置模式匹配;閉包(closure)敛劝;函數(shù)也可以看做一個(gè)值余爆;提供多線程(協(xié)同進(jìn)程,并非操作系統(tǒng)所支持的線程)支持
- 通過(guò)閉包和table可以很方便地支持面向?qū)ο缶幊趟枰囊恍╆P(guān)鍵機(jī)制夸盟,比如數(shù)據(jù)抽象蛾方,虛函數(shù),繼承和重載等
應(yīng)用場(chǎng)景
- 游戲開(kāi)發(fā)
- 獨(dú)立應(yīng)用腳本
- Web 應(yīng)用腳本
- 擴(kuò)展和數(shù)據(jù)庫(kù)插件
- 安全系統(tǒng)上陕,如入侵檢測(cè)系統(tǒng)
安裝
基本語(yǔ)法
- 單行注釋:
--
- 多行注釋:
--[=[
多行注釋
--]=]
- Lua 標(biāo)示符用于定義一個(gè)變量桩砰,函數(shù)獲取其他用戶定義的項(xiàng)。標(biāo)示符以一個(gè)字母 A 到 Z 或 a 到 z 或下劃線 _ 開(kāi)頭后加上0個(gè)或多個(gè)字母释簿,下劃線亚隅,數(shù)字(0到9)。最好不要使用下劃線加大寫(xiě)字母的標(biāo)示符庶溶,因?yàn)長(zhǎng)ua的保留字也是這樣的煮纵。
- 全局變量:默認(rèn)是全局變量懂鸵,如果要設(shè)置局部變量,加local關(guān)鍵字
數(shù)據(jù)類型
Lua 是動(dòng)態(tài)類型語(yǔ)言行疏,變量不要類型定義,只需要為變量賦值匆光。 值可以存儲(chǔ)在變量中,作為參數(shù)傳遞或結(jié)果返回酿联。Lua 中有 8 個(gè)基本類型分別為:nil终息、boolean、number贞让、string周崭、userdata、function震桶、thread 和 table休傍。
- nil:表示一個(gè)無(wú)效值(在條件表達(dá)式中相當(dāng)于false), nil進(jìn)行比較時(shí)要加上雙引號(hào),給全局變量或者table表里變量賦值nil時(shí)等同于把他刪掉
- boolean: 包含兩個(gè)值:false和true蹲姐。
- number: 表示雙精度類型的實(shí)浮點(diǎn)數(shù)
- string: 字符串由一對(duì)雙引號(hào)或單引號(hào)來(lái)表示
- function: 由 C 或 Lua 編寫(xiě)的函數(shù)
- userdata: 表示任意存儲(chǔ)在變量中的C數(shù)據(jù)結(jié)構(gòu)
- thread: 表示執(zhí)行的獨(dú)立線路磨取,用于執(zhí)行協(xié)同程序
- table: Lua 中的表(table)其實(shí)是一個(gè)"關(guān)聯(lián)數(shù)組"(associative arrays),數(shù)組的索引可以是數(shù)字柴墩、字符串或表類型忙厌。在 Lua 里,table 的創(chuàng)建是通過(guò)"構(gòu)造表達(dá)式"來(lái)完成江咳,最簡(jiǎn)單構(gòu)造表達(dá)式是{}逢净,用來(lái)創(chuàng)建一個(gè)空表。
案例
1. 字符串
- 定義一個(gè)局部變量val歼指,并輸出
local val = "hello"
print(val)
-- 結(jié)果是 hello
2. 表格
- 定義一個(gè)數(shù)組爹土,輸出第一個(gè)值
local myTable = { "redis", "lua", true, 8 }
print(myTable[1])
-- 結(jié)果是 redis
3. for
- 下面代碼會(huì)計(jì)算0到10的和
local num = 0
for i = 1, 10 do
num = num + i
end
print(num)
- 如果要遍歷myTable,需要知道tables的長(zhǎng)度踩身,只需要在變量前加一個(gè)#號(hào)即可:
for i = 1, #myTable do
print(myArray[i])
end
- Lua還提供了內(nèi)置函數(shù)ipairs胀茵,使用for index,value ipairs(tables)可以遍歷出所有的索引下標(biāo)和值:
for index, value in ipairs(myArray) do
print(index)
print(value)
end
4. while
- 下面代碼同樣會(huì)計(jì)算1到10的和挟阻,只不過(guò)使用的是while循環(huán)琼娘,while循環(huán)同樣以end作為結(jié)束符。
local sum = 0
local i = 0
while i <= 10 do
sum = sum + i
i = i + 1
end
print(sum)
5. if else
- 確定數(shù)組中是否包含了redis附鸽,有則打印true脱拼,注意if以end結(jié)尾,if后緊跟then
local myTable2 = { "python", "redis", "java" }
for i2 = 1, #myTable2 do
if myTable2[i2] == "redis" then
print("true")
break
else
print("false")
end
end
6. hash
- 使用類似哈希的功能坷备,同樣可以使用tables類型熄浓,例如下面代碼定義了一個(gè)tables,每個(gè)元素包含了key和value省撑,其中".."是將兩個(gè)字符串進(jìn)行連接:
user = { age = 10, name = "tom" }
print("user age is" .. user["age"])
- 如果要遍歷user玉组,可以使用Lua的內(nèi)置函數(shù)pairs:
for key, value in pairs(user) do
print(key .. value)
end
7. 函數(shù)定義
- 函數(shù)定義 Lua中谎柄,函數(shù)以function開(kāi)頭,以end結(jié)尾惯雳,funcName是函數(shù)名,中間部分是函數(shù)體
function add(param1, param2)
return param1 + param2
end
print(add(1,2))
以上為個(gè)人見(jiàn)解鸿摇,如有誤歡迎各位指正