莊周夢蝶

          生活、程序、未來
             :: 首頁 ::  ::  :: 聚合  :: 管理

          Lua學習小記——語言

          Posted on 2007-11-29 16:05 dennis 閱讀(2566) 評論(0)  編輯  收藏 所屬分類: 動態語言
          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種基本類型:
          nilboolean、number、string、userdata、functionthreadtable

          boolean類型除了false和nil是false之外,其他都是true
          lua支持函數式編程,因此函數是一等公民,userdata用于存儲C語言的數據,待深入。thread與多線程編程有關。table是lua的基本數據結構,是array和hash的綜合體,比較奇怪的是默認索引從1開始,而不是通常的0??蠢樱?br />

          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和錯誤信息。

          12.
          主站蜘蛛池模板: 丘北县| 东莞市| 忻州市| 资兴市| 如东县| 平顶山市| 安平县| 新昌县| 汝城县| 蓝山县| 宁河县| 大余县| 遵化市| 定陶县| 罗江县| 祥云县| 同德县| 冀州市| 中阳县| 古浪县| 固安县| 威信县| 革吉县| 平利县| 广河县| 西青区| 桂林市| 内乡县| 怀安县| 金堂县| 磴口县| 新乡市| 南京市| 咸宁市| 辽源市| 道孚县| 永年县| 长兴县| 横峰县| 宜君县| 密云县|