Lua 基本語法小結

1.Lua特性:
    a.輕量級(小巧腳本語言、方便嵌入其他程序)
    b.擴展性(可通過外部庫擴展)
    c.跨平臺
    d.支持面向過程編程、函數式編程
    e.自動內存管理(只提供一種通用類型表-table)
    f.語言內置模式匹配(closure、函數也是一種值、多線程支持-協同進程,並非系統所支持的線程)
    g.通過closure和table可以支持面向對象編程

2.Lua基本語法(要點):
單行註釋:
    --
多行註釋:
    --[[

    --]]
標識符:
    最好不使用下劃線加大寫字母的標識符
21個關鍵詞:
    and break do else elseif end false for function if in local nil not or repeat return then true until while
    注:一般約定以下劃線加大寫字符串的名字(如_VERSION)保留爲Lua內部局部變量
全局變量:
    a.默認情況下,變量總是全局的
    b.全局變量不需要聲明,且未初始化不會出錯,但結果是nil
    c.要刪除一個全局變量,可將nil賦給該變量

3.Lua數據類型
    nil boolean number string function userdata thread table
    注:
    a.string可以使用[[ ]]表示整塊的字符串
    b.字符串連接使用 ..
    c.可用#計算字符串長度
    d.table的創建可通過構造表達式來完成,最簡單爲{},創建空表,也可直接添加數據初始化
    e.table可視爲數組,數組索引可爲數字或字符串,默認初始索引以1開始
    f.table不會固定長度大小
    g.function可存在變量裏
    h.協同程序與線程差不多,擁有獨立的棧、局部變量、指令指針,可與其他協程共享全局變量等。但線程可以同時多個運行,但協程任意時刻只能運行一個,並且處於運行狀態的協程只有被掛起時纔會被暫停
    i.在 Lua 中對 0(number) 進行邏輯判斷,得到的結果是 true

4.Lua變量
    a.Lua 中的變量全是全局變量,無論語句塊或是函數裏,除非用 local 顯式聲明爲局部變量,變量默認值均爲nil
    b.Lua可以對多個變量同時賦值,變量列表和值列表的各個元素用逗號分開,賦值語句右邊的值會依次賦給左邊的變量.
    a, b = 10, 2*x       <-->       a=10; b=2*x
    c.應該儘可能的使用局部變量(可避免命名衝突、速度更快)

5.Lua函數
    a.函數支持同時返回多個值
    b.函數可接受可變數目的參數
        function add(...)
    c.閉包函數是指將一個函數寫在另一個函數之內,內部函數可以訪問外部函數的局部變量。內部函數沒有名稱,通常也叫匿名函數
        function newCounter()
        local i = 0
        return function()
                i=i+1
                return i
            end
        end
        c1 = newCounter()
        print(c1())    --> 1
        print(c1())    --> 2

6.Lua運算符(要點)
    a.邏輯運算-與或非:and or not
    b.關係運算-不等於:~=
    c.運算符優先級
    從高到低的順序:

    ^
    not    - (unary)
    *      /
    +      -
    ..
    <      >      <=     >=     ~=     ==
    and
    or

7.table = 數組+映射(博客摘錄)
1)數組
    ①a = {}
    a[1]=1
    a[2]=5
    a[3]="hello"
    print(a[1],a[2],a[3])

    ②a = {1,5,"hello"}
    print(a[1],a[2],a[3])

    這兩種定義方式效果一樣。
    
2)映射
    類似於C語言中的map,[]裏面的是key值。(數據庫的table)

    ①a= {}
    a["hello"]=2
    a[3]=false
    print(a.hello,a[3])

    ②a={["hello"]=2,[3]=false}
    print(a.hello,a[3])
    
    這兩種定義方式效果一樣。

8.迭代器之數組遍歷:
    for k,v in ipairs(t) do ... end
  迭代器之Table遍歷:
      for k,v in pairs(t) do ... end

資料參考:
https://blog.csdn.net/u013047859/article/details/51232768(Lua核心編程之基礎)
https://blog.csdn.net/u013047859/article/details/51234245(Lua核心編程之進階&amp;總結)
https://blog.csdn.net/xuzhonghai/article/details/7297560(大體瞭解Lua的語法) 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章