Lua學習小記——語言
1.起點,經典hello world:print("Hello World")
2.函數定義,類似JS,用begin end代替大括號:
function fact (n)
if n == 0 then
return 1
else
return n * fact(n-1)
end
end
function其實就是lambda算子.
3. 8種基本類型:
nil、boolean、number、string、userdata、function、thread和table
boolean類型除了false和nil是false之外,其他都是true
lua支持函數式編程,因此函數是一等公民,userdata用於存儲C語言的數據,待深入。thread與多線程編程有關。table是lua的基本數據結構,是array和hash的綜合體,比較奇怪的是默認索引從1開始,而不是通常的0。看例子:
days = {"Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"}
w = {x=0, y=0, label="console"}
4. lua與ruby一樣支持多重賦值和函數可以返回多個值,常見控製結構沒有什麼好說的。
5.可變參數,lua有很濃重的C味道,可變參數也與C一樣,用...表示:
function g (a, b, ...) ... end
也可以通過表來傳遞命名參數:
rename{old="temp.lua", new="temp1.lua"}
6.局部變量的聲明 local i=0,僅在聲明的代碼塊內有效。如果沒有聲明為local,將自動成為全局變量,一個變量在賦值前是nil,通過將變量聲明為nil可以刪除該變量
7.LUA是有尾遞歸優化的,也提供了各種高階函數以及閉包等等特性。
8.loadstring函數,一般其他解釋語言中的eval函數相似,不過他是返回一個chunk(每個chunk都是匿名函數)讓你執行,比如
f = loadstring("local a = 10; return a + 20")
print(f()) --> 30
9.require,用於加載文件,會搜索環境變量LUA_PATH設定的路徑,同時能判斷文件是否已經加載來避免重複加載。比較奇特的是路徑的設置,與一般的路徑完全不同,其實就是用?當占位符,然後require filename的時候,用filename代替這些文號,比如:
?;?.lua;c:\windows\?;/usr/local/lua/?/?.lua
lili
lili.lua
c:\windows\lili
/usr/local/lua/lili/lili.lua
10.lua通過loadlib函數可以加載動態鏈接庫
11.pcall在保護模式(protected mode)下執行函數內容,同時捕獲所有的異常和錯誤。若一切正常,pcall返回true以及“被執行函數”的返回值;否則返回nil和錯誤信息。文章轉自莊周夢蝶 ,原文發布時間2007-11-29
最後更新:2017-05-18 11:01:41