Lua腳本快速入門(mén)

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)

安裝

http://www.lua.org/

基本語(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)解鸿摇,如有誤歡迎各位指正

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末石景,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子拙吉,更是在濱河造成了極大的恐慌潮孽,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筷黔,死亡現(xiàn)場(chǎng)離奇詭異往史,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)佛舱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)椎例,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人请祖,你說(shuō)我怎么就攤上這事订歪。” “怎么了肆捕?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵刷晋,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我慎陵,道長(zhǎng)眼虱,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任席纽,我火速辦了婚禮捏悬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘胆筒。我一直安慰自己邮破,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布仆救。 她就那樣靜靜地躺著抒和,像睡著了一般。 火紅的嫁衣襯著肌膚如雪彤蔽。 梳的紋絲不亂的頭發(fā)上摧莽,一...
    開(kāi)封第一講書(shū)人閱讀 50,096評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音顿痪,去河邊找鬼镊辕。 笑死油够,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的征懈。 我是一名探鬼主播石咬,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼卖哎!你這毒婦竟也來(lái)了鬼悠?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤亏娜,失蹤者是張志新(化名)和其女友劉穎焕窝,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體维贺,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡它掂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了溯泣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虐秋。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖发乔,靈堂內(nèi)的尸體忽然破棺而出熟妓,到底是詐尸還是另有隱情,我是刑警寧澤栏尚,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布起愈,位于F島的核電站,受9級(jí)特大地震影響译仗,放射性物質(zhì)發(fā)生泄漏抬虽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一纵菌、第九天 我趴在偏房一處隱蔽的房頂上張望阐污。 院中可真熱鬧,春花似錦咱圆、人聲如沸笛辟。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)手幢。三九已至,卻和暖如春忱详,著一層夾襖步出監(jiān)牢的瞬間围来,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留监透,地道東北人桶错。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像胀蛮,于是被迫代替她去往敵國(guó)和親院刁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • Lua 5.1 參考手冊(cè) by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,770評(píng)論 0 38
  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線程醇滥,因...
    小菜c閱讀 6,377評(píng)論 0 17
  • Lua內(nèi)部采用一種通用的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)來(lái)表示所有數(shù)據(jù)類型黎比,Lua語(yǔ)言及其精簡(jiǎn),只有字符串和表兩種最基本的數(shù)據(jù)結(jié)構(gòu)鸳玩。然...
    JunChow520閱讀 2,302評(píng)論 0 1
  • 1米碰、當(dāng)centos最小化安裝時(shí)窝革,需要自己安裝所需要的安裝包、需要配置yum源吕座; 2虐译、運(yùn)行一些服務(wù)時(shí)需要關(guān)閉防火墻,...
    ALuckyLive閱讀 611評(píng)論 0 1
  • 今日計(jì)劃:①推算準(zhǔn)備活動(dòng)的可行性吴趴。 ②每日復(fù)盤(pán)漆诽。 ③繼續(xù)基金課第九天。 ...
    小熊星D閱讀 187評(píng)論 0 2