Lua中的table浅析
发布时间:2020-12-15 00:59:11 所属栏目:C语言 来源:网络整理
导读:Lua的table提供了Map的功能,实现了"关联数组",并且整数、字符串甚至nil都可以作为索引/key;table没有固定的大
Lua的table提供了Map的功能,实现了"关联数组",并且整数、字符串甚至nil都可以作为索引/key;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的数组长度的行为。 上面提到构造表达式{},介绍一下复杂一点的构造表达式: 复制代码 代码如下: 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 复制代码 代码如下: > t = {x=3,y=4,5,6,7} > unpack(t) > =unpack(t) 5 6 7 > a,b,c = unpack(t) --Lua支持多重赋值 > print(a,c) 5 6 7 > functionsum(a,c) >> return a +b + c >> end > =sum(unpack(t)) 18 您可能感兴趣的文章:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |