天天看點

Lua 學習筆記(二)文法、類型、值

     首先Lua執行的每一段代碼都稱之為“程式塊”,一個程式塊也就是一連串的語句或指令,例如一個源碼檔案或一行代碼。Lua語句之間并不需要分隔符,如代碼中的換行就不起任何作用,當然為了養成編碼習慣當兩條或者多條語句并列時最好使用分隔符進行分隔,如以下的四種都是合法的。

     x = 1; y = 2        x = 1 y = 2         x = 1;      y = 2;        x = 1      y = 2   一、辨別符規範      Lua中的辨別符可以是由任意字母、數字、下劃線組成的字元串,但不能以數字開頭。還有,應避免使用以一個下劃線并跟着一個或多個大寫字母的辨別符,因為Lua将這類辨別符保留用作特殊的用途。例如“_VERSION”。      當然Lua中有一些不能作為辨別符的保留字:      and、break、do、else、elseif、end、false、for、function、if、in、local、nil、not、or、repeat、return、then、true、until、while Lua對大小寫是敏感的。“false”與“faLse”、“False”都是不同的辨別符、false是一個保留字。      Lua中的注釋符,行注釋以“--”為開始字元的一行一直到行尾都屬于注釋部分,還有一種塊注釋以“--[[”開始至“]]”結束,如:  

Lua 學習筆記(二)文法、類型、值

       Lua中的全局變量不需要聲明,隻需将一個值賦予一個全局變量即可建立,如上例的“x=1”這裡的x就是全局變量,局部變量的聲明是前面加保留字local 如:local x=1。Lua中的值在未初始化時預設為nil,引用一個未初始化的變量不會引發報錯。  

Lua 學習筆記(二)文法、類型、值

  同樣的,未初始化的變量為nil值,那麼要删除一個已初始化的變量,隻需要把它的值重新設為nil即可。   二、類型      Lua是一種動态類型的語言。在語言中沒有類型定義的文法,每個值都“攜帶”了它自身的類型資訊。在Lua中有8種基礎的類型: nil(空)、boolean(布爾)、number(數字)、string(字元串)、userdata(自定義類型)、function(函數)、thread(線程)、table(表)  

Lua 學習筆記(二)文法、類型、值

       Lua中變量沒有預定義類型,任何變量都包含任何類型的值:  

Lua 學習筆記(二)文法、類型、值

  三、值        nil是一種類型,它隻有一個值nil,主要用于差別其他的任何值。Lua将nil表示為“無效值”。      boolean類型隻有兩個可選值true和false。Lua将false和nil視為“假”,将其他任何值視為“真”。      number類型用于表示實數。Lua中沒有整數類型,是以Lua中的數字可以表示任何32位整數,而不會産生四舍五入的錯誤。      string類型用于表示一個字元序列。Lua完全采用8為編碼,Lua字元串中的字元可以具有任何數值編碼,包括數值0。可以将任意二進制資料存儲到一個字元串中。Lua的字元串是不可改變的值。如果要修改字元,就會根據修改要求來建立新的字元串。      Lua提供了運作時的數字與字元串的自動轉換。在一個字元串上應用算術操作時,Lua會嘗試将這個字元串轉換成一個數字:  

Lua 學習筆記(二)文法、類型、值

    Lua不僅在算術操作中會以做這種強制轉換,還會在其他任何需要數字的地方這麼做。然而在Lua中也會把數字轉換成為字元串使用“..”符号  

Lua 學習筆記(二)文法、類型、值

    字元串與數字是不同的類型,是以 50 ==  ”50“ 是為false的,還可以使用tonumber、tostring函數進行數字與字元串的轉換,然而tonumber轉換時如果字元串中不能轉換為正确的數字時,tonumber将傳回nil。tostring可以轉換任何數字與字元串。  

Lua 學習筆記(二)文法、類型、值

  如何擷取字元串的長度:使用"#"長度操作符,在字元串前面加上#就可以獲得長度。如:  

Lua 學習筆記(二)文法、類型、值

       table是Lua中主要的資料結構機制,具有強大的功能。基于table可以以一種簡單、統一和高效的方式來表示普通數組、符号表、集合、記錄、隊列和其他資料結構。Lua也是通過table來表示子產品、包和對象的。table實作了”關聯數組“,是一種具有特殊索引方式的數組。不僅可以通過整數來索引它,還可以使用字元串或其他非nil值類索引它。而且table是沒有固定大小的,可以通過表元素來進行動态擴容。      table在Lua中既不是”值“也不是”變量“,而是”對象“。可以将table想象為一種動态配置設定的對象,程式僅儲存持有對他們的引用(可以了解為指針),Lua不會暗中産生table的副本或建立新的table,也不需要聲明一個table。table是通過”構造表達式“完成的,最簡單的構造表達式就是"{}"。  

Lua 學習筆記(二)文法、類型、值

       table永遠是”匿名的“,一個持有table的變量與table自身之間是沒有固定關聯性的。當程式沒有對一個table進行引用時,Lua的垃圾收集器最終會删除該table,并複用它的記憶體。  

Lua 學習筆記(二)文法、類型、值

轉載于:https://www.cnblogs.com/Richard-Core/p/4341902.html