Lua程序設計--類型與值

        Lua是一種動態類型的語言。在語言中沒有類型定義的語法,每一個值都「攜帶」了它自身的類型信息。編程

        在Lua中有8種基礎類型:nil(空)、boolean(布爾)、number(數字)、string(字符串)、userdata(自定義類型)、function(函數)、thread(線程)和table(表)。能夠經過自帶的type函數返回其傳入參數的類型名稱。函數

print(type("hello world")) ---->string
print(type(10.4*3))       ---->number
print(type(print))        ---->function
....
print(type(type(x)))      ----->string  :type函數老是返回一個字符串!

        變量沒有預約義的類型,任何變量均可以包含任何類型的值:測試

print(type(a))  --->nil(a 還沒有初始化)
a = 10
print(type(a))   --->number
a = "string"
print(type(a))  ---->string
a = print  這裏是把一個函數的引用賦值給變量a,a就表明這個函數。在Lua中,函數是做爲「第一類值」來看待的,能夠像操做其餘值同樣來操做一個函數值。
a(type(a))    ----->function

       nil (空)lua

      nil是一種類型,他只有一個值nil,它的主要功能是用於區別其餘任何值。Lua將nil用於表示一種「無效值」的狀況,既沒有任何有效值的狀況。spa

       boolean(布爾)線程

       boolean類型有兩個可選值:false和true,這與傳統的布爾值同樣。然而boolean卻不是一個條件值的惟一表示方式。在Lua中任何值均可以表示一個條件。Lua將值false和nil視爲「假」,而降除此以外的其餘值視爲「真」。注意:Lua條件測試中,將數字零和空字符串也都視爲「真」,code

       number(數字)對象

        number類型用於表示實數。Lua沒有整數、浮點數等數量類型。Lua中的數字能夠表示任何32位整數,而不會產生四捨五入的錯誤。書寫一個數字常量時,可使用普通的寫法,也可使用科學計數法,例如:內存

4     0.4      4.57e-3     0.3e12       5e+20

        string(字符串)字符串

        Lua中的字符串一般表示「一個字符序列」,能夠將任意二進制數據存儲到一個字符串中。

        Lua中的字符串是不可變的值。不能直接修改字符串的某個字符,而是應該根據修改要求來建立一個新的字符串。

a = "one string"
b = string.gsub(a, "one", "another") --->修改字符串的一部分,建立一個新的字符串b。
print(a)  ----> one string
print(b)   -----> another string

        Lua的字符串和其餘Lua對象(Table或函數)同樣,都是自動內存管理機制所管理的對象(無須擔憂字符串的分配和釋放)。

        一個字符串能夠小到包含一個字母,也能夠達到包含整本書。Lua可以高效地處理長字符串。

        字面字符串須要以一對匹配的單引號或雙引號來界定。

a = 'a line'
b = "another line" 根據編程風格,應該堅持在程序中使用相同類型的引號。

        Lua中可使用轉義字符還能夠經過數值來指定字符串中的(特殊)字符,數值以轉義序列「\<ddd>」給出,其中<ddd>是一個至多3個十進制數字組成的序列。

"alo\n123"  與  "\97lo \10\04923"  相同('a' 是97;'換行' 是10 ;'1' 是 49)

        Lua中還可使用一對匹配的雙方括號來界定一個字母字符串,就像寫「塊註釋」那樣。以這種方式書寫的字符串能夠延伸多行,Lua不會解釋其中的轉義序列。

若是,此類字符串的第一個字符是一個換行符,那麼Lua會忽略它。這種狀況在遇到可能包含已經被註釋掉的代碼,能夠在兩個左方括號間加上任意數量的等號

[====[,修改後字面字符串只有在遇到一個內嵌有相同數量等號的雙右括號時纔會結束,即]====]。

        Lua提供了運行時的數字與字符串的自動轉換。在一個字符串上應用算術操做時,Lua會嘗試將這個字符串轉換成一個數字:

print("10" + 1) ---->11
print("10 + 1") ----->10 +1自己就是一個字符串
print("hello" + 1)  ----->錯誤,不能轉換。

       在Lua指望一個字符串但卻獲得一個數字時,它也會將數字轉換成字符串:

print(10 .. 20) --->1020此處打印出來的1020實質上是一個字符串。

        在Lua中,「..」是字符串鏈接操做符。當直接在一個數字後面輸入它時,必需要用一個空格來分割他們。

       tonumber:顯示地將一個字符串轉換成數字。

        tostring:將數字轉成字符串(或者將該數字與一個空字符串相鏈接)

      在Lua5.1中,能夠在字符串前放置操做符「#」來得到該字符串的長度。

a = "hello"
print(#a)   -->5
相關文章
相關標籤/搜索