匿名
未登录
讨论
暗色模式
贡献
创建账号
登录
滚动的天空Wiki
搜索
编辑“
Help:Lua
”(章节)
来自滚动的天空Wiki
命名空间
帮助
讨论
更多
更多
语言
变体
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
页面操作
阅读
编辑源代码
历史
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
==== table ==== '''表(table)'''是复合数据类型,是Lua中最复杂的一种数据类型,很像JavaScript中的对象(object)或者Python中的字典(dict)。在Lua中,表同时充当了映射、列表、集合的功能。 表由多个(或者零个)字段组成,每个字段都有'''键(key)'''和'''值(value)''',其中键可以是除nil或nan外的任何值。不存在的字段可视为其值为nil。键是唯一的,值不是唯一的。若键为表或函数,则判断其唯一性是根据其是否为同一个对象。 声明一个表的方法是:在一组花括号中,使用“[键] = 值”的方式表示一个字段,多个字段使用逗号或分号隔开。如果键是字符串的字面量,且该字符串符合变量名称要求,则可以省略引号并使用“键 = 值”的方式表示。例如,{{code|code={a = 1, b = "2"}|lang=lua}}中,{{code|"a"|lang=lua}}和{{code|"b"|lang=lua}}都是键,{{code|1|lang=lua}}和{{code|"2"|lang=lua}}是对应的值,也可以表示为{{code|code={["a"] = 1, ["b"] = 2}|lang=lua}}。 声明一个表时,键是可以省略的。例如,{{code|{"a", "b", "c", "d", "e"}|lang=lua}}等价于{{code|code={[1]="a", [2]="b",[3]="c", [4]="d", [5]="e"}|lang=lua}},这样的表称为'''数组(array)'''或'''序列(sequence)''',其特点就是键是连续不间断的正整数。空表也可以视为数组 对于表t和数字b,如果满足{{code|code=(t == 0 or t[b] ~= nil) and t[b + 1] == nil|lang=lua}},则称b为表t的一个'''边界(border)'''。数组只有一个边界。有多个边界的表不是严格的数组,称为'''稀疏数组(sparse array)''',对其进行取长运算会返回其中一个边界,存在不确定性。例如,{{code|code={nil, 2, 3, nil, nil, 6} }}是个稀疏数组,其边界为0、3、6,因此其长度可能是0、3、6中的某一个值。 表也可以用作'''集合(set)''',如{{code|code={a = true, b = true, c = true}|lang=lua}},因为键是不能重复的,所以可以通过判断键对应的值是否存在来判断集合是否包含某个元素。 '''表的字段访问:'''可以通过“<code>-{}-变量名称[键]</code>”或“<code>-{}-变量名称.键</code>”(该方法的键必须是可作标识符的字符串)的方式来访问表中的键对应的值,也就是说,找到一个键为指定的值(表、函数等需要是同一对象,字符串、数字等只需要值相等即可)的字段,并返回其值。例如,如果t是一个表,则{{code|code=t[true]|lang=lua}}表示布尔值键true对应的值,{{code|code=t.abc|lang=lua}}或{{code|code=t["abc"]|lang=lua}}表示字符串键{{code|"abc"|lang=lua}}对应的值。如果这个值不存在,返回nil。 '''表的字段赋值:'''可以通过赋值语句修改表中的键对应的值。可以给表添加字段、修改现有字段的值或者清除一个字段。例如,{{code|code=t[true] = "q"|lang=lua}}表示将键true对应的值修改为字符串"q",{{code|code=t["abc"] = nil|lang=lua}}或{{code|code=t.abc = nil|lang=lua}}(该方法的键必须是可作标识符的字符串)表示将键{{code|"abc"|lang=lua}}对应的值修改为nil(相当于删除这个字段,如果其原来的值不是nil的话)。注意:键可以是除nil或nan外的任意值,可以是函数、表,甚至是表自身,也就是说{{code|code=t[print] = 1|lang=lua}}、{{code|code=t[t] = t|lang=lua}}这样的用法都是有效的,而{{code|code=t[0/0] = 1|lang=lua}}则是无效的(0/0相当于nan,参考[[#number]])。 表不会自动复制。例如如果t是一个表,则赋值语句{{code|code=s = t|lang=lua}}'''不会将t的内容复制到新的表s中,而是会让变量s和t的指针都指向同一个内存空间,它们仍是同一个对象''',对表s的修改和对t的修改是同步、等价的。 Lua中,判断两个表是否相等的标准是两个表是否'''是同一个对象''',而不是内容是否一致。例如,在上面这一段的例子中,{{code|code=s == t|lang=lua}}就会返回true,而{{code|code={} == {}|lang=lua}}会返回false。一般来说,每对花括号都意味着创建了一个新的对象。 Lua标准库中的[[Help:Lua/table|table库]]可用于处理表,其中大部分函数都是用于处理数组(表中的数组部分)的。此外,本wiki也搬运了元模块[[Module:TableTools|TableTools]],可用于对表进行一些高级的处理。 此外,表的索引、赋值、判断相等等操作都可以受到[[#元表]]影响。
摘要:
请注意您对滚动的天空Wiki的所有贡献都被认为是在Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)下发布,请查看在
Project:版权
的细节。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)
Cookie帮助我们提供我们的服务。通过使用我们的服务,您同意我们使用cookie。
更多信息
确定
导航
导航
首页
最近更改
随机页面
所有页面
帮助
格式
互助客栈
Wiki条例
管理员告示板
工具
导入页面
展开模板
创建或编辑任意页面
参数设置
Wiki工具
Wiki工具
特殊页面
页面值
获取缩短的URL
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志
其他项目
变体
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體