亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

Lua學習筆記之類型與值

2024-07-21 23:04:27
字體:
來源:轉載
供稿:網友

基礎介紹

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

nil(空)類型

boolean(布爾)類型

number(數字)類型

string(字符串)類型

userdata(自定義類型)

function(函數)類型

thread(線程)類型

table(表)類型

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

local iValue = 10local fValue = 10.2local strValue = "Hello World"local funcValue = printlocal bValue = truelocal nilValue = nillocal tbValue = {}if type(iValue) == "number" then print("It is a number")endif type(fValue) == "number" then print("It is a number")endif type(strValue) == "string" then print("It is a string")endif type(funcValue) == "function" then print("It is a function")endif type(bValue) == "boolean" then print("It is a boolean")endif type(nilValue) == "nil" then print("It is a nil")endif type(tbValue) == "table" then print("It is a table")endnil(空)

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

boolean(布爾)

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

number(數字)

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

string(字符串)

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

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

table(表)

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

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

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

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

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

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

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

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

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

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

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

這該輸出多少呢?

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

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

function(函數)

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

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

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

thread主要用于“協同程序”。

總結

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

以上所述就是本文的全部內容了,希望能夠對大家學習lua語言有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品一区二区久久久久| 亚洲日本aⅴ片在线观看香蕉| 欧美精品午夜视频| 九九久久久久99精品| 欧美极品少妇xxxxⅹ裸体艺术| 国产精品日韩av| 成人免费观看49www在线观看| 国产精品av在线| 精品亚洲一区二区三区在线观看| 国产精品爱啪在线线免费观看| 国产精品丝袜久久久久久不卡| 人人爽久久涩噜噜噜网站| 日本久久中文字幕| 性色av一区二区三区免费| 日韩在线高清视频| 久久综合网hezyo| 欧美日韩成人精品| 国产视频观看一区| 亚洲免费福利视频| 狠狠做深爱婷婷久久综合一区| 久久99国产精品自在自在app| 欧美日韩第一页| 美女黄色丝袜一区| 欧美在线欧美在线| 久久久欧美一区二区| 国产精品流白浆视频| 亚洲无亚洲人成网站77777| 中文字幕精品一区久久久久| 久久大大胆人体| 91精品国产91久久久久久不卡| 亚洲色在线视频| 亚洲精品v欧美精品v日韩精品| 国产91久久婷婷一区二区| 夜夜躁日日躁狠狠久久88av| 欧美男插女视频| 日本一区二区在线播放| 亚洲精品美女免费| 亚洲欧洲偷拍精品| 成人久久久久久久| 美女久久久久久久| 亚洲最大福利网| 亚洲欧美日韩国产中文| 欧美成人sm免费视频| 色悠悠国产精品| 亚洲人精品午夜在线观看| 国产精品视频自在线| 亚洲电影免费观看高清完整版在线观看| 狠狠色噜噜狠狠狠狠97| 亚洲精品视频在线播放| 欧美激情在线视频二区| 久久国产精品视频| 久久久精品美女| 国产va免费精品高清在线观看| 亚洲午夜精品久久久久久性色| 国产中文日韩欧美| 精品国产一区二区三区久久狼5月| 精品自在线视频| 久久精品小视频| 欧美成年人网站| 亚洲国产美女久久久久| 欧美日韩一区免费| 日韩成人在线视频网站| 精品日韩美女的视频高清| 久久久黄色av| 日本欧美国产在线| 日韩亚洲精品电影| 亚洲日韩欧美视频一区| 欧美乱大交做爰xxxⅹ性3| 亚洲成人黄色在线观看| 隔壁老王国产在线精品| 欧美日韩国产丝袜美女| 成人看片人aa| 日韩美女视频免费在线观看| 国产成人精品一区二区| 亚洲永久免费观看| 夜夜躁日日躁狠狠久久88av| 懂色av一区二区三区| 国产精品毛片a∨一区二区三区|国| 欧美日韩精品国产| 久久久精品影院| 国产精品偷伦一区二区| 国产suv精品一区二区三区88区| 久久99热精品这里久久精品| 97精品国产97久久久久久| 8050国产精品久久久久久| 久久综合电影一区| 日韩成人在线免费观看| 亚洲一区二区三区成人在线视频精品| 国产91色在线免费| 日韩动漫免费观看电视剧高清| 日韩欧美主播在线| 乱亲女秽乱长久久久| 深夜成人在线观看| 欧美精品一区三区| 亚洲天堂色网站| 欧美日韩午夜视频在线观看| 国产精品专区一| 国产视频综合在线| 日韩欧美视频一区二区三区| 日韩av快播网址| 久久国产精品电影| 国产欧美一区二区三区四区| 欧美成年人视频| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲综合成人婷婷小说| 久久久综合av| 成人性生交大片免费观看嘿嘿视频| 日本高清+成人网在线观看| 91精品国产综合久久香蕉最新版| 成人黄色片在线| 久久精品国产v日韩v亚洲| 久久久999精品免费| 亚洲精品国产电影| 国产日韩在线免费| 欧美中文字幕视频| 91精品91久久久久久| 国产一区二区三区直播精品电影| 在线观看欧美日韩| 欧美色视频日本版| 91亚洲永久免费精品| 亚洲a成v人在线观看| 欧美猛男性生活免费| 国产成人精品视频| 激情懂色av一区av二区av| 中文字幕亚洲二区| 色视频www在线播放国产成人| 国产精品成熟老女人| 性欧美暴力猛交69hd| 欧美在线视频一区| 成人免费激情视频| 日韩电影第一页| 国产一区二区三区18| 国产精品久久久久久久一区探花| 亚洲精品电影网站| 久久99久国产精品黄毛片入口| 日韩电影在线观看中文字幕| 亚洲欧美国产日韩中文字幕| 欧美超级乱淫片喷水| 亚洲国产日韩一区| 日韩免费视频在线观看| 国产精品久久久久77777| 日韩人在线观看| 欧美www视频在线观看| 成人免费视频a| 亚洲综合av影视| 波霸ol色综合久久| 国产亚洲人成a一在线v站| 亚洲天堂男人天堂女人天堂| 日韩美女毛茸茸| 亚洲精品福利资源站| 亚洲精品大尺度| 热99精品里视频精品| 91成品人片a无限观看| 91探花福利精品国产自产在线| 91欧美精品成人综合在线观看| 欧美精品第一页在线播放| 精品偷拍一区二区三区在线看| 亚洲精品99久久久久| 亚洲成人动漫在线播放| 国产有码一区二区| 九九热99久久久国产盗摄| 国产成人a亚洲精品| 欧美大片在线看免费观看| 午夜精品久久久久久久久久久久久|