Lua文法學習【1】—lua語言的基本類型

來源:互聯網
上載者:User

    看了《Programming in lua》、整理一下比較有用的東西、不想再翻電子書了、麻煩、雖說不是很厚、只有280多頁、只是沒實體書、還是比較尷尬的、純粹為了以後查資料方便吧
    首先記住一句話、在Lua中、一切都是變數、除了關鍵字 
    所有的語言、都要用到變數。在Lua中、不管你在什麼地方使用變數,都不需要聲明,並且所有的這些變數總是全域變數,除非,你在前面加上"local"、這一點要特別注意、因為你可能想在函數裡使用局部變數、卻忘了用local來說明 
    至於變數名、它跟c語言一樣、大小寫也是敏感的、
    定義一個變數的方法就是賦值、"="操作就是用來賦值的 
    我們一起來定義幾種常用類型的變數吧、 
    怎麼確定一個變數是什麼類型的呢?可以用type()函數來檢查、
    type("helloworld") --string型
   Lua支援的類型有以下幾種:  
  A. Nil 
  正如前面所說的、沒有使用過的變數的值、都是Nil、有時候我們也需要將一個變數清除、這時候、我們可以直接給變數賦以nil值、
  local Var = nil -- 請注意nil一定要小寫 

  B. Boolean 
  布爾值有兩種:true和false、在Lua中,只有false和nil才被計算為false、而所有任何其它類型的值、都是true。比如0、Null 字元串等、都是true、不要被C語言的習慣所誤導、0在Lua中就是true、 
  bVar = true

  C. Number 
   在Lua中、數值相當於C語言的double、可表示任何32位整數 
  在Lua中、是沒有整數類型的、也不需要、一般情況下,只要數值不是很大、是不會產生舍入誤差的、表示方法同C語言類似、如: 
  4 0.4 4.57e-3 0.3e12 5e+20 

  D. String 
    字串在Lua中有幾種方法來表、最通用的方法、是用雙引號或單引號來括起一個字串的,如: 
    "This is a string." 
        不過在Lua中不能像c語言中那樣直接修改字串的某個字元、而是根據修改來建立一個新的字串、比如:
        a = "one string"
        b = string.gsub(a, "one", "another") -- change string parts
        print(a)  --> one string
        print(b)   --> another string
    和C語言相同的,它支援一些逸出字元,列表如下: 
    \a bell 
    \b back space 
    \f form feed 
    \n newline 
    \r carriage return 
    \t horizontal tab 
    \v vertical tab 
    \\ backslash 
    \" double quote 
    \[ left square bracket 
    \] right square bracket 

  E. Table 
   關係表類型、這是一個很強大的類型、我們可以把這個類型看作是一個數組、只是C語言的數組只能用正整數來作索引、在Lua、你可以用任意類型來作數組的索引、除了nil、同樣、在C語言中、數組的內容只允許一種類型、在Lua中、你也可以用任意類型的值來作數組的內容、除了nil
    Table的定義很簡單,它的主要特徵是用"{"和"}"來括起一系列資料元素的。比如: 
    T1 = {} -- 定義一個空表 
    T1[1]=10 -- 然後我們就可以象C語言一樣來使用它了、
      再如:
    T1["John"]={Age=27, Gender="Male"} 
    這一句相當於: 
    T1["John"]={}
    T1["John"]["Age"]=27 
    T1["John"]["Gender"]="Male" 
    當表的索引是字串的時候,我們可以簡寫成: 
    T1.John={} 
    T1.John.Age=27 
    T1.John.Gender="Male" 
    或 
    T1.John{Age=27, Gender="Male"} 
    這是一個很強的特性、反正按自己的習慣來寫、怎麼習慣、怎麼舒服怎麼來
    在定義表的時候,我們可以把所有的資料內容一起寫在"{"和"}"之間,這樣子是非常方便,而且很好看。比如,前面的T1的定義,我們可以這麼寫: 
    T1= 
    { 
      10, -- 相當於 [1] = 10 
      [100] = 40, 
      John= -- 如果你原意,你還可以寫成:["John"] = 
      { 
        Age=27, -- 如果你原意,你還可以寫成:["Age"] =27 
        Gender=Male -- 如果你原意,你還可以寫成:["Gender"] =Male 
      }, 
      20 -- 相當於 [2] = 20 
    } 
    需要注意三點: 
    第一,所有元素之間、總是用逗號","隔開; 
    第二,所有索引值都需要用"["和"]"括起來;如果是字串,還可以去掉引號和中括弧; 
    第三,如果不寫索引、則索引就會被認為是數字、並按順序自動從1往後編 

  F. Function 
    函數,在Lua中,函數的定義也很簡單。典型的定義如下: 
    function add(a,b) -- add 是函數名字,a和b是參數名字 
     return a+b -- return 用來返回函數的運行結果 
    end 
    函數其實也是一種變數類型嗎、上面的函數定義、其實相當於: 
    add = function (a,b) return a+b end 
    當你重新給add賦值時、它就不再表示這個函數了、所以、你的變數名是不能取跟函數名一樣的、你甚至可以賦給add任意資料、包括nil、
    和C語言一樣、Lua的函數可以接受可變參數個數、它同樣是用"…"來定義的、比如: 
    function sum (a,b,…) 
    如果想取得…所代表的參數,可以在函數中訪問arg局部變數(表類型)得到。 
    如 sum(1,2,3,4) 
    則,在函數中,a = 1, b = 2, arg = {3, 4} 
    更牛逼的是、它可以同時返回多個結果、比如: 
    function s() 
      return 1,2,3,4 
    end 
    a,b,c,d = s() -- 此時,a = 1, b = 2, c = 3, d = 4 

    前面說過、表類型可以擁有任意類型的值、包括函數!因此,有一個很強大的特性是、擁有函數的表、Lua可以使用物件導向編程了、
    t = 
    { 
     Age = 27 
     add = function(self, n) self.Age = self.Age+n end 
    } 
    print(t.Age) -- 27 
    t.add(t, 10) 
    print(t.Age) -- 37 

    t.add(t,10) 這一句實在是有點土對吧?沒關係、在Lua中、你可以簡寫成: 
    t:add(10) -- 相當於 t.add(t,10) 

參考文獻:《Programming in lua》

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.