元表的理解

2021-05-31  本文已影响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方法是一个函数,则返回该函数的返回值


上一篇 下一篇

猜你喜欢

热点阅读