02.Lua的資料類型

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   os   strong   io   

      簡單認識Lua

           百度了一下(偷哈懶就不自己寫了)

    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就刪除。

    資料類型

        Lua是一種動態類型的語言,沒有類型定義文法;也就是說一個Lua變數既可以儲存數字類型的值也可以儲存字串類型的值或者其他類型。但通常我們不這樣幹,因為很容易混淆。Lua定義了8中基礎類型

類型 名稱 類型 名稱
nil 空 boolean 布爾
number 數字 string 字串
userdata 自訂類型 function 函數
thread 線程 table 表

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

 

print(a)                          -- a的值為nilprint(type(tmp))                  -- tmp的值為nil但這裡不是列印它的值,而是值的類型tmp = 3                           -- 給tmp賦值整數3print(type(tmp))                  --> numbertmp = 3.14                        -- 給tmp賦值浮點數print(type(tmp))                  --> numbertmp = print                       -- 將函數print賦值給tmpprint(type(tmp))                  --> functiontmp = true                        print(type(tmp))                  --> booleantmp = nil                         -- 給全域變數nil值相當於刪除print(type(tmp))                  --> nil

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

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

        數字類型: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 stringprint(b)                         --> oneb=string.gsub(a,"one","other")   -- 執行字串替換  當然你也可以這樣寫a=string.gsub(a,"one","other")print(a)                         --> one stringprint(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)         -->  32print("29 + 3")         -->  29 + 3print("3.14"*"2.5")     -->  7.85--print("hello"+8)     錯誤,Lua解釋為加法計算,但不能將hello轉換為數字print("hello"..8)       -->  hello8--print(10..20)    這句錯誤,使用串連操作符時,如果第一個運算元是數字需要使用空格隔開,如下面兩句print(10 .. 20)         -->  1020print(10 ..30)          -->  1030b = 10=="10"print(b)                -->  falseprint(10==tonumber("10"))   -->  trueprint(tostring(10)=="10")   -->  true-------------長度操作符的使用----------a = "hello"print(#a)                    -->  5print(#"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])                                 -->123print(a[10])                                  -->20b = a                                         --將表引用賦值給bprint(a[tmp])                                 -->20   a[10] = 30                                    --修改表中元素的值print(a[10])                                  -->30-------------表訪問另一種文法---------------------------a.name = "xiaoyue"print(a.name)                                 -->xiaoyueprint(a["name"])                              -->xiaoyue       說明:這兩句都是訪問表中key為name的項目--------------擷取表大小--------------------------------a = {}a[100] = 20print(#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])                                  -->oneprint(a[j])                                  -->twoprint(a[k])                                  -->other     說明: i j k 三個變數都可以轉換為數字類型10                                              --                  但表訪問時並沒有做資料轉換,所有三個key不一樣print(a[tonumber(j)])                        -->oneprint(a[tonumber(k)])                        -->one

       資料類型就先說到這裡吧,後面還有幾個函數等類型就放在以後說了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.