第一版是为 Lua 5.0 编写的。虽然在很大程度上仍然适用于更高版本,但仍有一些区别。
第四版针对 Lua 5.3,可在 Amazon 和其他书店购买。
购买本书,您还将帮助支持 Lua 项目。
Lua 编程 | ||
第二部分。表和对象 第 13 章。元表和元方法 |
通常,Lua 中的表具有一组可预测的操作。我们可以添加键值对,我们可以检查与键关联的值,我们可以遍历所有键值对,仅此而已。我们不能添加表,我们不能比较表,我们不能调用表。
元表允许我们更改表的行为。例如,使用元表,我们可以定义 Lua 如何计算表达式 a+b
,其中 a
和 b
是表。每当 Lua 尝试添加两个表时,它都会检查其中任何一个表是否具有元表,以及该元表是否具有 __add
字段。如果 Lua 找到此字段,它将调用相应的值(所谓的元方法,它应该是一个函数)来计算和。
Lua 中的每个表可能都有自己的元表。(正如我们稍后将看到的,用户数据也可以有元表。)Lua 总是创建没有元表的新表
t = {} print(getmetatable(t)) --> nil我们可以使用
setmetatable
来设置或更改任何表的元表
t1 = {} setmetatable(t, t1) assert(getmetatable(t) == t1)任何表都可以是任何其他表的元表;一组相关的表可以共享一个通用元表(描述它们的共同行为);一个表可以是它自己的元表(以便它描述它自己的个人行为)。任何配置都是有效的。
版权所有 © 2003–2004 Roberto Ierusalimschy。保留所有权利。 |