最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Lua中的基本數(shù)據(jù)類型詳細介紹

 更新時間:2014年09月29日 09:28:17   作者:果凍想  
這篇文章主要介紹了Lua中的基本數(shù)據(jù)類型詳細介紹,本文詳細的講解了Lua中的8種基本數(shù)據(jù)類型,需要的朋友可以參考下

基礎介紹

Lua是一種動態(tài)類型的語言。在語言中沒有類型定義的語法,每個值都帶有其自身的類型信息。在Lua中有8中基本類型,分別是:

1.nil(空)類型
2.boolean(布爾)類型
3.number(數(shù)字)類型
4.string(字符串)類型
5.userdata(自定義類型)
6.function(函數(shù))類型
7.thread(線程)類型
8.table(表)類型

以上是Lua中的8中基本類型,我們可以使用type函數(shù),判斷一個值得類型,type函數(shù)返回一個對應類型的字符串描述。例如:

復制代碼 代碼如下:

local iValue = 10
local fValue = 10.2
local strValue = "Hello World"
local funcValue = print
local bValue = true
local nilValue = nil
local tbValue = {}
 
if type(iValue) == "number" then
     print("It is a number")
end
 
if type(fValue) == "number" then
     print("It is a number")
end
 
if type(strValue) == "string" then
     print("It is a string")
end
 
if type(funcValue) == "function" then
     print("It is a function")
end
 
if type(bValue) == "boolean" then
     print("It is a boolean")
end
 
if type(nilValue) == "nil" then
     print("It is a nil")
end
 
if type(tbValue) == "table" then
     print("It is a table")
end

nil(空)

nil是一種類型,它只有一個值nil。一個全局變量在第一次賦值前的默認值就是nil,將nil賦予一個全局變量等同于刪除它。Lua將nil用于表示一種“無效值”的情況,即沒有任何有效值得情況。

boolean(布爾)

boolean類型有兩個可選值:false和true。一定需要注意的是,在Lua中只有false和nil是“假”的,而除此之外的都是“真”,這和其它語言有所區(qū)別的。我之前有一個同事,就吃過這個虧。

number(數(shù)字)

number類型用于表示雙精度浮點數(shù)。Lua沒有整數(shù)類型,而Lua中的數(shù)字可以表示任何32位整數(shù)。

string(字符串)

Lua中的字符串通常表示“一個字符序列”。Lua完全采用8位編碼。Lua的字符串是不可變的值。不能像C語言中那樣直接修改字符串的某個字符,而是應該根據(jù)修改要求來創(chuàng)建一個新的字符串。Lua的字符串和其它對象都是自動內(nèi)存管理機制所管理的對象,不需要擔心字符串的內(nèi)存分配和釋放。在Lua中,字符串可以高效的處理長字符串。當字符串是多行存在時,可以使用“[[]]”符號來界定一個多行字符串,同時,Lua不會解釋其中的轉(zhuǎn)義序列。例如:

復制代碼 代碼如下:

local page = [[
     <html xmlns="http://www.w3.org/1999/xhtml">
          <head>
               <title>xxxx</title>
          </head>
          <body>
          </body>
     </html>
]]
print(page)

table(表)

table類型實現(xiàn)了關(guān)聯(lián)數(shù)組,關(guān)聯(lián)數(shù)組是一種具有特殊索引方式的數(shù)組;不僅可以通過整數(shù)來索引它,還可以使用字符串或其它類型的值(除了nil)來索引它。此外,table沒有固定的大小,可以動態(tài)得添加任意數(shù)量的元素到一個table中。

在Lua中,table既不是“值”,也不是“變量”,而是對象??梢詫able想象成一種動態(tài)分配的對象,程序中僅僅有一個隊它們的引用(指針)。table的創(chuàng)建是通過“構(gòu)造表達式”完成的,最簡單的構(gòu)造表達式就是{}。

table永遠是匿名的,一個引用table的變量與table自身之間沒有固定的關(guān)聯(lián)性,例如以下代碼:

復制代碼 代碼如下:

local a = {} -- 創(chuàng)建一個table,并將它的引用存儲在a
a["x"] = 10
local b = a -- b與a引用同一個table
print(b["x"])
b["x"] = 20
print(a["x"])
 
b = nil -- 現(xiàn)在只有a還在引用table
-- 錯誤:print(b["x"])
print(a["x"])
a = nil -- 現(xiàn)在不存在對table的引用

當對一個table的引用為0時,Lua的垃圾收集器最終會刪除該table,并釋放它所占用的內(nèi)存空間。當table的某個元素沒有初始化時,它的內(nèi)容就是nil;另外還可以像全局變量一樣,將nil賦予table的某個元素來刪除該元素。

在Lua中,對于a["name"]這種形式的寫法提供了一種更簡便的寫法,可以直接輸入a.name。先看看以下代碼:

復制代碼 代碼如下:

local a = {}
 
a["name"] = 10
print(a.name) -- 等價于print(a["name"])

這種寫法本身提供了簡便性,但是有的時候,卻給程序員帶來了困惑;我就常常會把a.x和a[x]搞錯,a.x表示a["x"],表示以字符串”x”來索引table;而a[x]是以變量x的值來索引table。通過下面這段代碼,來看看它們之間的區(qū)別:

復制代碼 代碼如下:

local a = {}
x= "y"
a[x] = 10
print(a[x])  -->10  相當于a["y"]
print(a.x)   -->nil 相當于a["x"]
print(a.y)   -->10  相當于a["y"]

在Lua 5.1中,長度操作符“#”用于返回一個數(shù)組或線性表的最后一個索引值。在實際項目中,我們經(jīng)常使用該操作符來獲取數(shù)組或線性表的長度。但是使用該操作符是存在陷阱的,比如下面一段代碼:

復制代碼 代碼如下:

local a = {}
a[1000] = 1
print(#a)

這該輸出多少呢?

在Lua中,對于所有未初始化的元素的索引結(jié)果都是nil。Lua將nil作為界定數(shù)組結(jié)尾的標志。當一個數(shù)組有“空隙”時,即中間含有nil時,長度操作符會認為這些nil元素就是結(jié)尾標記。因為a[1] = nil,所以,對于上述代碼的輸出應該是0。所以,在處理table的時候,需要考慮這個問題。那么對于含有nil的table,如何獲取它的長度呢?我們可以使用table.maxn,它將返回一個table的最大正索引數(shù),如下所示:

復制代碼 代碼如下:

local a = {}
a[1000] = 1
print(table.maxn(a)) -->1000

function(函數(shù))

在Lua中,函數(shù)被當做值來對待,這表示函數(shù)可以存儲在變量中,可以通過參數(shù)傳遞給其它函數(shù),還可以作為其它函數(shù)的返回值。Lua既可以調(diào)用自身Lua語言編寫的函數(shù),又可以調(diào)用以C語言編寫的函數(shù)。Lua所有的標準庫都是用C語言寫的。我在之后,還會詳細的總結(jié)Lua中的函數(shù)的。在這里就說這么多。

userdata(自定義類型)和thread(線程)

userdata用于表示一種由應用程序或C語言庫所創(chuàng)建的新類型。由于userdata類型可以將任意的C語言數(shù)據(jù)存儲到Lua變量中。在Lua中,這種類型沒有太多的預定義操作,只能進行賦值和相等性測試。

thread主要用于“協(xié)同程序”,在之后會繼續(xù)總結(jié)的。這里就不做太多的總結(jié)。

總結(jié)

這篇基本就是Lua基本類型的掃盲文章,希望對大家有點用。

相關(guān)文章

  • C語言中通過LUA API訪問LUA腳本變量的簡單例子

    C語言中通過LUA API訪問LUA腳本變量的簡單例子

    這篇文章主要介紹了C語言中通過LUA API訪問LUA腳本變量的簡單例子,需要的朋友可以參考下
    2014-11-11
  • Lua中的閉包學習筆記

    Lua中的閉包學習筆記

    這篇文章主要介紹了Lua中的閉包學習筆記,閉包是可以包含自由(未綁定到特定對象)變量的代碼塊;這些變量不是在這個代碼塊內(nèi)或者任何全局上下文中定義的,而是在定義代碼塊的環(huán)境中定義(局部變量),需要的朋友可以參考下
    2014-12-12
  • Lua語言新手簡單入門教程

    Lua語言新手簡單入門教程

    這篇文章主要給大家介紹的是關(guān)于Lua語言新手入門的簡單教程,文中通過示例代碼一步步介紹的非常詳細,對各位新手們的入門提供了一個很方便的教程,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。
    2018-03-03
  • Lua極簡入門指南(六):模塊

    Lua極簡入門指南(六):模塊

    這篇文章主要介紹了Lua極簡入門指南(六):模塊,本文講解了require函數(shù)、編寫模塊、查找模塊等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • Lua中的全局變量、非全局變量總結(jié)

    Lua中的全局變量、非全局變量總結(jié)

    這篇文章主要介紹了Lua中的全局變量、非全局變量總結(jié),全局變量可稱之為Lua環(huán)境變量,需要的朋友可以參考下
    2014-09-09
  • Lua中操作字符串的基本方法整理

    Lua中操作字符串的基本方法整理

    這篇文章主要介紹了Lua中操作字符串的基本方法整理,是Lua入門學習中的基礎知識,需要的朋友可以參考下
    2015-05-05
  • Lua中的string庫(字符串函數(shù)庫)總結(jié)

    Lua中的string庫(字符串函數(shù)庫)總結(jié)

    這篇文章主要介紹了Lua中的string庫(字符串函數(shù)庫)總結(jié),本文講解了string庫的操作方法,著重講解了string.format方法,需要的朋友可以參考下
    2014-11-11
  • Lua數(shù)據(jù)類型介紹

    Lua數(shù)據(jù)類型介紹

    這篇文章主要介紹了Lua數(shù)據(jù)類型介紹,本文講解了Lua中的nil(空)、boolean(布爾)、number(數(shù)字)、string(字符串)、table(表)、function(函數(shù))、thread(線程)、userdata(自定義類型)等數(shù)據(jù)類型,需要的朋友可以參考下
    2014-12-12
  • 舉例詳解Lua中的協(xié)同程序編程

    舉例詳解Lua中的協(xié)同程序編程

    這篇文章主要介紹了Lua中的協(xié)同程序編程,是Lua入門學習中的基礎知識,需要的朋友可以參考下
    2015-05-05
  • Lua所有內(nèi)置函數(shù)羅列

    Lua所有內(nèi)置函數(shù)羅列

    這篇文章主要介紹了Lua所有內(nèi)置函數(shù)羅列,本文匯集了Lua腳本語言的所有內(nèi)置函數(shù),需要的朋友可以參考下
    2015-04-04

最新評論

洪洞县| 贵州省| 叙永县| 崇仁县| 玉林市| 璧山县| 夹江县| 惠来县| 石阡县| 叙永县| 沙洋县| 洞头县| 卢氏县| 浦东新区| 河池市| 琼海市| 莲花县| 尉氏县| 彭泽县| 开化县| 嘉善县| 长阳| 页游| 柯坪县| 高州市| 永春县| 北安市| 马公市| 桑日县| 双流县| 徐汇区| 楚雄市| 深圳市| 都安| 界首市| 桃园市| 云梦县| 广西| 怀远县| 镇远县| 龙江县|