Lua語言新手簡(jiǎn)單入門教程
一、前言
Lua 是一種輕量小巧的腳本語言,用標(biāo)準(zhǔn) C 語言編寫并以源代碼形式開放,其設(shè)計(jì)目的是為了嵌入應(yīng)用程序中,從而為應(yīng)用程序提供靈活的擴(kuò)展和定制功能。
Lua 可以應(yīng)用在游戲開發(fā)、獨(dú)立應(yīng)用腳本、Web 應(yīng)用腳本、擴(kuò)展和數(shù)據(jù)庫插件、安全系統(tǒng)等場(chǎng)景。
筆者學(xué)習(xí)的目的主要是為了能在 Web 應(yīng)用(Nginx、Redis)中使用到 Lua 腳本。
特點(diǎn)
- Lua腳本可以很容易的被C/C++ 代碼調(diào)用,也可以反過來調(diào)用C/C++的函數(shù)。
- Lua由標(biāo)準(zhǔn)C編寫而成,代碼簡(jiǎn)潔優(yōu)美,幾乎在所有操作系統(tǒng)和平臺(tái)上都可以編譯,運(yùn)行。
- 以極小的體積和簡(jiǎn)單的語法提供全面的功能。[一個(gè)完整的Lua解釋器不過200k,在目前所有腳本引擎中,Lua的速度是最快的]
- 實(shí)現(xiàn)與宿主語言的簡(jiǎn)潔接口
- 成為一個(gè)很容易嵌入其它語言中使用的語言。
特性
- 支持面向?qū)ο缶幊?/li>
- 輕量級(jí)
- 可擴(kuò)展
- 函數(shù)式編程
- 自動(dòng)內(nèi)存管理
- 通用類型的表–table,可實(shí)現(xiàn)數(shù)組,哈希表,集合,對(duì)象
- 支持閉包
- 支持多線程
- 支持交互式編程
二、安裝
注意:請(qǐng)確保安裝 Lua 之前系統(tǒng)已安裝 readline 和 readline-devel。如果沒有則鍵入 yum install -y readline readline-devel
進(jìn)行安裝。
curl -R -O http://www.lua.org/ftp/lua-5.3.4.tar.gz tar zxf lua-5.3.4.tar.gz cd lua-5.3.4 make linux test
測(cè)試,命令行中鍵入 lua -v:
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
顯示 Lua 版本說明安裝正確。
三、運(yùn)行方式
與其他腳本語言一樣,我們需要將 Lua 代碼編寫在文件中,后綴名為 .lua。
運(yùn)行該文件的代碼時(shí),只需在命令行鍵入 lua xx.lua 即可。
四、語法
4.1 數(shù)據(jù)類型
Lua 中包含 8 種基本數(shù)據(jù)類型,即:nil、boolean、number、string、userdata、function、thread 和 table。
數(shù)據(jù)類型 | 說明 |
---|---|
nil | 表示無效值,在條件表達(dá)式中表示 false。 |
boolean | 布爾值,包含 true 和 false 兩個(gè)值。 |
number | 表示雙精度類型的實(shí)浮點(diǎn)數(shù)。 |
string | 表示字符串,通過雙引號(hào)或單引號(hào)括住。 |
userdata | 表示任意存儲(chǔ)在變量中的 C 數(shù)據(jù)結(jié)構(gòu) |
function | 表示 C 或 Lua 編寫的函數(shù) |
thread | 表示執(zhí)行的獨(dú)立線程,用于執(zhí)行協(xié)同程序。 |
table | 表示一個(gè)關(guān)聯(lián)數(shù)組,數(shù)組索引可以是數(shù)字或字符串。 |
例如:
a=10 str="hello world"
不需要聲明變量類型,我們可以通過 type() 判斷變量類型。
注意:
Lua 變量有三種類型:全局變量、局部變量和表中的域;
默認(rèn)情況下,不管在哪聲明的變量都是全局變量。通過 local 修飾的變量為局部變量;
變量默認(rèn)值為 nil。
4.2 運(yùn)算符
1) 賦值運(yùn)算符
str="hello".."world" -- 通過 .. 連接字符串 a,b=10,15 -- a=10,b=15 c,d,e=1,2 -- c=1,b=2,e=nil
2) 算術(shù)運(yùn)算符
與其他程序設(shè)計(jì)語言類似。
a,b=10,15 c=a+b -- 加號(hào) d=a-b -- 減號(hào) e=a*b -- 乘號(hào) f=a/b -- 除號(hào) g=a%b -- 求余 h=a^2 -- 求乘方 i=-a -- 負(fù)號(hào)
3) 關(guān)系運(yùn)算符
與其他程序設(shè)計(jì)語言類似。
a,b=10,15 print(a>b) -- 大于 print(a<b) -- 小于 print(a==b) -- 等于 print(a~=b) -- 不等于
4) 邏輯運(yùn)算符
print(true and false) -- 與 print(true or false) -- 或 print(not true) -- 非
5) 其他運(yùn)算符
操作符 | 說明 |
---|---|
.. | 連接兩個(gè)字符串 |
# | 返回字符串或表的長(zhǎng)度,如 #“l(fā)ua” |
4.3 流程控制
1) 條件判斷,有 3 種寫法。
-- if 語句 if(true) then print("hello") end -- if .. else 語句 a,b=10,15 if(a>b) then print(a) else print(b) end -- if 嵌套 c=20 if(c>10) then if(c<30) then print(c) end end
2) 循環(huán),有 4 種寫法。
類型 | 說明 |
---|---|
while 循環(huán) | 在條件為 true 時(shí),讓程序重復(fù)執(zhí)行語句。 |
for 循環(huán) | 重復(fù)執(zhí)行指定語句,重復(fù)次數(shù)在 for 中控制??梢员闅v數(shù)字和泛型。 |
repeat .. until | 重復(fù)執(zhí)行循環(huán),直到指定條件為真為止。 |
循環(huán)嵌套 | 循環(huán)內(nèi)嵌套多個(gè)循環(huán)語句。 |
例如:
-- while 循環(huán) a=10 while(a>0) do print(a) a=a-1 end -- for 循環(huán),遍歷數(shù)字 for a=1,10,1 do print(a) end -- repeat .. until 循環(huán) a=10 repeat print(a) a=a-1 until(a<1)
4.4 數(shù)組
Lua 數(shù)組大小不固定且下標(biāo)從 1 開始。
arr={"h","e","l","l","o"} -- 此處使用遍歷數(shù)字方式 for index=1,#arr do print(arr[index]) end -- 此處使用遍歷泛型方式 for i,v in ipairs(arr) do print(i,v) end
4.5 函數(shù)
-- 案例 1 function calc(a,b,c) return a+b+c end result=calc(1,2,3) print(result) -- 案例 2 function getCalc(a,b,c) return a,b,c end r1,r2,r3=getCalc(1,2,3) print(r1,r2,r3)
Lua 中的函數(shù)允許返回多個(gè)值。
4.6 table
table 是 Lua 中的一個(gè)數(shù)據(jù)結(jié)構(gòu),類似于 Java 中的 Map 類型或 Javascript 中的 JSON 對(duì)象。
Lua table 使用關(guān)聯(lián)數(shù)組,我們可以使用任意類型值作為數(shù)組的索引,但不能是 nil。
Lua table 大小不固定。
person={} person.name="jack" person.age=20 print(person[1]) print(person.name) print(person["age"])
4.7 模塊和包
模塊類似于一個(gè)封裝庫。從 Lua 5.1 開始,Lua 加入標(biāo)準(zhǔn)的模塊管理機(jī)制,可以將一些公用的代碼放在一個(gè)文件中,以 API 接口的形式在其他地方調(diào)用,有利于代碼的重用和降低代碼耦合。
Lua 的模塊由變量、函數(shù)等已知元素組成的 table 。
例如:
創(chuàng)建名為 module.lua 的文件。
module={} module.index=1 function module.sum(a,b) return a+b end
另一個(gè)文件引入:
-- 此處 module 是文件名 require "module" -- 此處 module 是引入模塊中定義的名稱 print(module.index) print(module.sum(1,2))
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Lua的編譯、執(zhí)行和調(diào)試技術(shù)介紹
這篇文章主要介紹了Lua的編譯、執(zhí)行和調(diào)試技術(shù)介紹,本文著重講解了對(duì)錯(cuò)誤的處理,另外也講解了編譯和執(zhí)行等知識(shí),需要的朋友可以參考下2015-04-04Lua編程示例(四):Lua標(biāo)準(zhǔn)庫之表庫、字符串庫、系統(tǒng)庫
這篇文章主要介紹了Lua編程示例(四):Lua標(biāo)準(zhǔn)庫之表庫、字符串庫、系統(tǒng)庫,需要的朋友可以參考下2015-07-07Lua中的函數(shù)(function)、可變參數(shù)、局部函數(shù)、尾遞歸優(yōu)化等實(shí)例講解
這篇文章主要介紹了Lua中的函數(shù)(function)、可變參數(shù)、局部函數(shù)、尾遞歸優(yōu)化等實(shí)例講解,需要的朋友可以參考下2014-09-09