美文网首页
元表的理解

元表的理解

作者: 我家菇凉 | 来源:发表于2021-05-31 14:25 被阅读0次

元表本质上来说是一种用来存放元方法的table。我们可以通过对应的key来得到value值,作用就是修改一个值的行为(更确切的说,这是元方法的能力),需要注意的是,这种修改会覆盖掉原本该值可能存在的相应的预定义行为。

1. lua中的每个值都可以有一个元表,只是table和userdata可以有各自独立的元表,而其他类型的值则共享其类型所属的单一元表。

   lua代码中只能设置table的元表,至于其他类型值的元表只能通过C代码设置。

   多个table可以共享一个通用的元表,但是每个table只能拥有一个元表。 

我们称元表中的键为事件(event),称值为元方法(metamethod)。前述例子中的事件是"add",元方法是执行加法的函数。

可通过函数getmetatable查询任何值的元表。

可通过函数setmetatable替换表的元表

lua查找表中的元素时规则如下:

 1.在表中查找,如果找到,返回该元素,找不到则继续

  2.判断该表是否有元表,如果没有元表,返回nil,有元表则继续

  3.判断元表有没有__index方法,如果__index方法为nil,则返回nil;如果__index方法是一个表,则重复1、2、3;如果__index方法是一个函数,则返回该函数的返回值


相关文章

  • 元表的理解

    元表本质上来说是一种用来存放元方法的table。我们可以通过对应的key来得到value值,作用就是修改一个值的行...

  • LUA学习——元表与元方法

    元表,理解为对table的预定义的操作集合。

  • 给lua文件注入插件的方法

    1. 初衷 好久没有更新博客了,之前写了lua元表相关的东西,如果对元表不理解的话,可以在站内搜索一下lua的元表...

  • Lua 实现面向对象 (原创)

    要理解Lua是如何实现面向对象的。首先要熟悉Lua元表的相关知识,可以阅读我上一篇文章《Lua元表 (Metata...

  • lua metatable __nexindex方法

    __index元方法是访问,如果表中没有就会进元方法查找(如果有元表的话),如果元方法是表,返回元表的元素;如果元...

  • Lua中元表的学习

    Lua本身没有面向对象的思想,但是可以根据表、元表、元方法来靠近它 一、元表与元方法的概念Lua中每个值都可具有元...

  • Hive02

    外部表创建 外部表与内部表的区别:内部表 删除表 元数据和数据丢失、外部表 删除表 只删除元数据 数据依然存在 L...

  • Lua-元表

    元表Metatable Lua提供了元表,允许我们改变table的行为,每个行为关联了对应的元方法。 例如,使用元...

  • 深入理解哈希表

    深入理解哈希表 深入理解哈希表

  • Lua元表Metatable

    1. 元表的含义 元表是带有索引集合的表,它可以改变被附加的表的行为 2. 算术类的元方法 下面是我们为我们tab...

网友评论

      本文标题:元表的理解

      本文链接:https://www.haomeiwen.com/subject/msbwsltx.html