1.起點(diǎn),經(jīng)典hello world:
這與大多數(shù)腳本語(yǔ)言沒什么兩樣,總體來說如果你對(duì)JavaScript、Ruby、Python之類有所學(xué)習(xí)的話,LUA還是相當(dāng)簡(jiǎn)單的
2.函數(shù)定義,類似JS,用begin end代替大括號(hào):
function fact (n)
if
n == 0 then
return
1
else
return
n * fact(n-1)
end
end
function其實(shí)就是lambda算子.
3. 8種基本類型:
nil、boolean、number、string、userdata、function、thread和table
boolean類型除了false和nil是false之外,其他都是true
lua支持函數(shù)式編程,因此函數(shù)是一等公民,userdata用于存儲(chǔ)C語(yǔ)言的數(shù)據(jù),待深入。thread與多線程編程有關(guān)。table是lua的基本數(shù)據(jù)結(jié)構(gòu),是array和hash的綜合體,比較奇怪的是默認(rèn)索引從1開始,而不是通常的0。看例子:
days = {"Sunday", "Monday", "Tuesday",
"Wednesday",
"Thursday", "Friday",
"Saturday"}
w = {x=0, y=0, label="console"}
4. lua與ruby一樣支持多重賦值和函數(shù)可以返回多個(gè)值,常見控制結(jié)構(gòu)沒有什么好說的。
5.可變參數(shù),lua有很濃重的C味道,可變參數(shù)也與C一樣,用...表示:
function g (a, b, ...) ... end
也可以通過表來傳遞命名參數(shù):
rename{old="temp.lua", new="temp1.lua"}
6.局部變量的聲明 local i=0,僅在聲明的代碼塊內(nèi)有效。如果沒有聲明為local,將自動(dòng)成為全局變量,一個(gè)變量在賦值前是nil,通過將變量聲明為nil可以刪除該變量
7.LUA是有尾遞歸優(yōu)化的,也提供了各種高階函數(shù)以及閉包等等特性。
8.loadstring函數(shù),一般其他解釋語(yǔ)言中的eval函數(shù)相似,不過他是返回一個(gè)chunk(每個(gè)chunk都是匿名函數(shù))讓你執(zhí)行,比如
f = loadstring("local a = 10; return a
+ 20")
也可以通過loadfile將整個(gè)文件載入作為chunk。
9.require,用于加載文件,會(huì)搜索環(huán)境變量LUA_PATH設(shè)定的路徑,同時(shí)能判斷文件是否已經(jīng)加載來避免重復(fù)加載。比較奇特的是路徑的設(shè)置,與一般的路徑完全不同,其實(shí)就是用?當(dāng)占位符,然后require filename的時(shí)候,用filename代替這些文號(hào),比如:
?;?.lua;c:\windows\?;/usr/local/lua/?/?.lua
當(dāng)你require 'lili'的時(shí)候,就會(huì)尋找下列路徑的文件:
lili
lili.lua
c:\windows\lili
/usr/local/lua/lili/lili.lua
10.lua通過loadlib函數(shù)可以加載動(dòng)態(tài)鏈接庫(kù)
11.
pcall在保護(hù)模式(protected mode)下執(zhí)行函數(shù)內(nèi)容,同時(shí)捕獲所有的異常和錯(cuò)誤。若一切正常,pcall返回true以及“被執(zhí)行函數(shù)”的返回值;否則返回nil和錯(cuò)誤信息。
12.