02.Lua的數據類型

      簡單認識Luahtml

           百度了一下(偷哈懶就不本身寫了)數組

    Lua 是一個小巧的腳本語言。是巴西里約熱內盧天主教大學(Pontifical Catholic University of Rio de Janeiro)裏的一個研究小組,
由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所組成並於1993年開發。 其設計目的是爲了嵌入應用程序中,
從而爲應用程序提供靈活的擴展和定製功能。Lua由標準C編寫而成,幾乎在全部操做系統和平臺上均可以編譯,運行。Lua並無提供強大的庫,
這是由它的定位決定的。因此Lua不適合做爲開發獨立應用程序的語言。Lua 有一個同時進行的JIT項目,提供在特定平臺上的即時編譯功能。
          命名規範:Lua採用了和CSharp相似的命名規範由任意字母、數字和下劃線構成,但不能以數字開頭。原則上不使用下劃線加大寫字母變量名稱。固然也不能使用Lua關鍵字,並且Lua也是卻分大小寫的。關鍵字以下:
and break do else elseif end false
for function if in local nil not
or repeat return then true until while

         註釋:行註釋使用兩個連字符(--);多行註釋有兩種大同小異以」--[[「開始,以」--]]」結尾或者以」--[==[」開始以」 –]==]」結尾中間的等號能夠任意多個但先後要匹配。函數

         全局變量:Lua中的全局變量比較特殊,不須要聲明直接使用便可,沒有給值獲得的久是nil值。刪除全局變量直接給他nil就刪除。測試

    數據類型ui

        Lua是一種動態類型的語言,沒有類型定義語法;也就是說一個Lua變量既能夠存儲數字類型的值也能夠存儲字符串類型的值或者其餘類型。但一般咱們不這樣幹,由於很容易混淆。Lua定義了8中基礎類型編碼

類型 名稱 類型 名稱
nil boolean 布爾
number 數字 string 字符串
userdata 自定義類型 function 函數
thread 線程 table

      Lua中獲取變量類型也比較簡單實用type函數便可。寫一段代碼測試先:lua

 

print(a)                          -- a的值爲nil
print(type(tmp))                  -- tmp的值爲nil但這裏不是打印它的值,而是值的類型
tmp = 3                           -- 給tmp賦值整數3
print(type(tmp))                  --> number
tmp = 3.14                        -- 給tmp賦值浮點數
print(type(tmp))                  --> number
tmp = print                       -- 將函數print賦值給tmp
print(type(tmp))                  --> function
tmp = true                        
print(type(tmp))                  --> boolean
tmp = nil                         -- 給全局變量nil值至關於刪除
print(type(tmp))                  --> nil

        上面代碼很簡單也有註釋很容易看懂就再也不解釋。spa

        布爾類型:布爾類型主要用於分支結構中判斷真與假。Lua在條件測試時只有兩個值認爲是假:false和nil,其餘任何值都認爲是真包括數字零和空字符串。操作系統

        數字類型:Lua中的數字類型來得至關簡潔沒有CSharp中的長短整型、單雙精度浮點數,就一個number實數類型。線程

        字符串:Lua中的字符串是不可變的值,也就是說不能在字符串上直接修改。字面字符串既可使用雙引號也可使用單引號,但建議統一一種風格。Lua中也支持轉義字符

\a 響鈴 \b 退格
\f 提供表格 \n 換行
\r 回車 \t 水平tab
\v 垂直tab \\ 反斜槓
\」 雙引號 \’ 單引號

                    除轉義字符外Lua也支持根據ASCII編碼將數字轉義爲字符。另外可使用兩對方括號」[[」」]]」一段字符串,裏面的字符串將不會被轉義。但兩對方括號並不能處理全部狀況好比字符串中包含a=b[c[i]],這中狀況能夠想塊註釋那樣,在方括號中間加任意的等號。

         字符串類型轉換:說到字符串就不得不說字符串與數字之間的類型轉換。在Lua中,Lua解釋器會根據上下文自動將字符串轉換爲數字或者將數字轉換爲字符串。仍是看下面代碼的」類型轉換「部分:

a = "one string"
b = 'one'
print(a)                         --> one string
print(b)                         --> one
b=string.gsub(a,"one","other")   -- 執行字符串替換  固然你也能夠這樣寫a=string.gsub(a,"one","other")
print(a)                         --> one string
print(b)                         --> other string
--------------------------

-----------ASCII 數字轉義----------------
a = "hello worl\100"
print(a)                         --> heloo world

-----------------塊字符串,不轉義內容-------------------
a = [[
    <html>
    <head>字符串測試</head>
    <body><h1>http://home.cnblogs.com/u/BlueBeauty</h1> </body>
    </html>
]]

print(a)
----------------------塊字符串,處理極端狀況----------------------------
a = [===[
    <html>
    <head>字符串測試</head>
    <body><h1>http://home.cnblogs.com/u/BlueBeauty</h1><h2>a=b[c[i]]</h2> </body>
    </html>
]===]

print(a)


---------------------類型轉換-----------------------------
print("29" + 3)         -->  32
print("29 + 3")         -->  29 + 3
print("3.14"*"2.5")     -->  7.85
--print("hello"+8)     錯誤,Lua解釋爲加法計算,但不能將hello轉換爲數字
print("hello"..8)       -->  hello8
--print(10..20)    這句錯誤,使用鏈接操做符時,若是第一個操做數是數字須要使用空格隔開,以下面兩句
print(10 .. 20)         -->  1020
print(10 ..30)          -->  1030
b = 10=="10"
print(b)                -->  false
print(10==tonumber("10"))   -->  true
print(tostring(10)=="10")   -->  true

-------------長度操做符的使用----------
a = "hello"
print(#a)                    -->  5
print(#"hello worl\100 hjs")     -->  15

        表(table)類型:Lua中的表實現了」關聯數組「,它能使用除nil之外的任何lua類型值來索引數組。對錶更準確的理解表應該是對象。使用一對大括號{}來建立表,並且他老是匿名的。當沒有變量持有表的引用時,Lua將自動收回其內存。下面仍是經過代碼來看看錶的具體操做:

-----------------------表建立於基本訪問------------------------
a = {}                                        --打印a的地址table: 004FC330(也就是引用) 建立一個表,沒有任何元素
print(a)
tmp = "hjs"
a[tmp] = 123                                  --添加一個項目(key=hjs , value = 123),table會動態增長和全局變量相似
a[10] = 20                                    --添加一個項目(key=10 , value = 20)
print(a[tmp])                                 -->123
print(a[10])                                  -->20

b = a                                         --將表引用賦值給b
print(a[tmp])                                 -->20   
a[10] = 30                                    --修改表中元素的值
print(a[10])                                  -->30

-------------表訪問另外一種語法---------------------------
a.name = "xiaoyue"
print(a.name)                                 -->xiaoyue
print(a["name"])                              -->xiaoyue       說明:這兩句都是訪問表中key爲name的項目

--------------獲取表大小--------------------------------
a = {}
a[100] = 20
print(#a)                                     --> 0  說明:Lua使用nil做爲數組的結束標記,a[1]的值爲nil全部這裏獲得0 (Lua中下標一般從1開始)
print(table.maxn(a))                          --> 100   使用table.maxn函數能夠很好的工做

-------------表索引的數據類型轉換-----------------------
i =10 ; j="10";k = "+10"
a = {}
a[i] = "one"
a[j] = "two"
a[k] = "other"
print(a[i])                                  -->one
print(a[j])                                  -->two
print(a[k])                                  -->other     說明: i j k 三個變量均可以轉換爲數字類型10 
                                             --                  但表訪問時並無作數據轉換,全部三個key不同

print(a[tonumber(j)])                        -->one
print(a[tonumber(k)])                        -->one

       數據類型就先說到這裏吧,後面還有幾個函數等類型就放在之後說了。

相關文章
相關標籤/搜索