Lua元表和元方法(Metatables and Metamethods)
Posted 森明帮大于黑虎帮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lua元表和元方法(Metatables and Metamethods)相关的知识,希望对你有一定的参考价值。
Lua
中的 table
由于定义的行为,我们可以对 key-value
对执行加操作,访问 key
对应的 value
,遍历所有的 key-value
。但是我们不可以对两个 table
执行加操作,也不可以比较两个表的大小。
Metatables
允许我们改变 table
的行为,例如,使用 Metatables
我们可以定义 Lua
如何计算两个 table
的相加操作 a+b
。当 Lua
试图对两个表进行相加时,他会检查两个表是否有一个表有 Metatable
,并且检查 Metatable
是否有__add
域。如果找到则调用这个__add
函数(所谓的 Metamethod
)去计算结果。
Lua
中的每一个表都有其 Metatable
。(后面我们将看到 userdata
也有 Metatable
), Lua
默认创建一个不带 metatable
的新表。
可以使用 setmetatable
函数设置或者改变一个表的 metatable
。
任何一个表都可以是其他一个表的 metatable
,一组相关的表可以共享一个 metatable
(描述他们共同的行为)。一个表也可以是自身的 metatable
(描述其私有行为)。
以上是关于Lua元表和元方法(Metatables and Metamethods)的主要内容,如果未能解决你的问题,请参考以下文章