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)的主要内容,如果未能解决你的问题,请参考以下文章

lua面向对象编程10分钟上手

Lua学习

lua中的元表---metatable

lua中的元表---metatable

Lua - 在元表中只调用一个运算符

Lua_第 12 章 Metatables and Metamethods