天天看點

Lua學習小記——語言

1.起點,經典hello world:

print("hello world")

這與大多數腳本語言沒什麼兩樣,總體來說如果你對javascript、ruby、python之類有所學習的話,lua還是相當簡單的

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

也可以通過loadfile将整個檔案載入作為chunk。

9.require,用于加載檔案,會搜尋環境變量lua_path設定的路徑,同時能判斷檔案是否已經加載來避免重複加載。比較奇特的是路徑的設定,與一般的路徑完全不同,其實就是用?當占位符,然後require filename的時候,用filename代替這些文号,比如:

?;?.lua;c:\windows\?;/usr/local/lua/?/?.lua

當你require 'lili'的時候,就會尋找下列路徑的檔案:

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

繼續閱讀