国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

Lua中的table淺析

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

Lua的table提供了Map的功能,實現了"關聯數組",并且整數、字符串甚至nil都可以作為索引/key;table沒有固定的大小。
 
基于table,可以表示普通數組、符號表、集合、記錄、隊列和其他數據結構。
 
而Lua也是通過table來解決模塊(module)、包(package)和對象(Object)的。
例如io.read表示使用"read"來索引table io。
 
在Lua中,table既不是值也不是"變量",而是對象,可以類比Java中的數組。
 
table是通過構造表達式的,最簡單的就是{}

復制代碼 代碼如下:

> a={}
> a['name'] = 'wyj'
> =a.name
wyj
 
table永遠是匿名的,一個持有table的變量與table自身沒有固定的關聯性:
復制代碼 代碼如下:

> b = a
> b.name = 'ljq'
> =a.name
ljq
> b = nil
> =a.name
ljq
 
b['name']和b.name等價,而對于數字只能使用b['3']的形式,同Javascript。
 
同其他對象一樣,當沒有table的引用時,Lua的垃圾回收器最終回收table。
 
其實Lua將全局變量存儲在一個table中。
 
table的長度可以通過#獲取(#還可以獲取字符串的長度)
復制代碼 代碼如下:

> table = {}
> for i = 1,10 do
>> table[i] = i
>> end
> =#table
10

但不是所有情況都適用
復制代碼 代碼如下:

> table = {}
> table[3] = 3
> table.name = 'wyj'
> =#table
0
 
實際上,在第一次碰到nil時,就認為是結束標志
復制代碼 代碼如下:

> table = {}
> table[10] = 10
> =#table
0
> table[1] = 1
> =#table
1

這一點,不同于Javascript的數組長度的行為。

 

Lua,table

上面提到構造表達式{},介紹一下復雜一點的構造表達式:

復制代碼 代碼如下:

a = {'wyj', 'lmy'}
a= {x = 10, y = 20,l='s'}

但是下面的方式不正確
復制代碼 代碼如下:

> a={1=3}
stdin:1: '}'expected near '='
> a={'x'=3}
stdin:1: '}'expected near '='

而應該這樣使用:
復制代碼 代碼如下:

> x = {[1] = 3,['name'] = 'www'}
> =x[1]
3
> =x.name
www

 
table還可以嵌套
復制代碼 代碼如下:

> a = {x = {y =1}}
> =a.x.y
1

更復雜的方式,可以調用函數初始化
> x ={math.sin(3)}
> =x[1]
0.14112000805987
 
另外需要特別注意的是,無label的項會自動生成整數的label
復制代碼 代碼如下:

> x = {1, 2, [2]=3, 4,5}
> =x[1]
1
> =x[2]
2
> =x[3]
4

所以,顯式的label為整數的情況下要特別小心。
 
另外支持用;替換,
復制代碼 代碼如下:

>x={x=1;y=2; 'one', 'two'}
> xx
1
> =x[1]
one

 

unpack

NoteGem Horizontal Line
內置函數unpack可以提取key為1.2.3...的元素

復制代碼 代碼如下:

> t = {x=3,y=4,5,6,7}
> unpack(t)
> =unpack(t)
5        6        7
> a,b,c = unpack(t) --Lua支持多重賦值
> print(a,b,c)
5        6        7
 
> functionsum(a,b,c)
>> return a +b + c
>> end
> =sum(unpack(t))
18
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 镇康县| 白山市| 赤水市| 清远市| 揭西县| 南投县| 筠连县| 娱乐| 崇礼县| 凤冈县| 新化县| 汕尾市| 江孜县| 灵台县| 六枝特区| 房山区| 梧州市| 乐业县| 明星| 易门县| 浮山县| 华阴市| 阳城县| 都江堰市| 额尔古纳市| 汉源县| 施甸县| 镇巴县| 天峻县| 南郑县| 罗山县| 江源县| 南投县| 肇庆市| 明水县| 敦煌市| 沙湾县| 辉南县| 宣化县| 永济市| 肃北|