返回介绍

2.5.7 - Table 构造

发布于 2019-08-25 13:16:35 字数 1131 浏览 1234 评论 0 收藏 0

table 构造子是一个构造 table 的表达式。 每次构造子被执行,都会构造出一个新的 table 。 构造子可以被用来构造一个空的 table, 也可以用来构造一个 table 并初始化其中的一些域。 一般的构造子的语法如下

	tableconstructor ::= `{´ [fieldlist] `}´
	fieldlist ::= field {fieldsep field} [fieldsep]
	field ::= `[´ exp `]´ `=´ exp | Name `=´ exp | exp
	fieldsep ::= `,´ | `;´

每个形如 [exp1] = exp2 的域向 table 中增加新的一项, 其键值为 exp1 而值为 exp2。 形如 name = exp 的域等价于 ["name"] = exp。 最后,形如 exp 的域等价于 [i] = exp , 这里的 i 是一个从 1 开始不断增长的数字。 这这个格式中的其它域不会破坏其记数。 举个例子:

 a = { [f(1)] = g; "x", "y"; x = 1, f(x), [30] = 23; 45 }

等价于

 do
 local t = {}
 t[f(1)] = g
 t[1] = "x" -- 1st exp
 t[2] = "y" -- 2nd exp
 t.x = 1 -- t["x"] = 1
 t[3] = f(x) -- 3rd exp
 t[30] = 23
 t[4] = 45 -- 4th exp
 a = t
 end

如果表单中最后一个域的形式是 exp , 而且其表达式是一个函数调用或者是一个可变参数, 那么这个表达式所有的返回值将连续的进入列表 (参见 §2.5.8)。 为了避免这一点,你可以用括号把函数调用(或是可变参数)括起来 (参见 §2.5)。

初始化域表可以在最后多一个分割符, 这样设计可以方便由机器生成代码。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文