Lua元表、元方法

一个table可以通过key和value去操作,但是两个table之间的操作却操作不了;

所以,Lua的元表就可以操作两个table,改变table的行为;

而关联操作的行为的,就是元方法;

(为指定的table设置元表的方法)

  • setmetatable(table,metatable): 对指定 table 设置元表(metatable),如果元表(metatable)中存在 __metatable 键值,setmetatable 会失败。
  • getmetatable(table): 返回对象的元表(metatable)。

例:

1 mytable = {}                          -- 普通表
2 mymetatable = {}                      -- 元表
3 setmetatable(mytable,mymetatable)     -- 把 mymetatable 设为mytable 的元表

算术操作符:

__add 对应的运算符  '+'.

__sub 对应的运算符  '-'.

__mul 对应的运算符  '*'.

__div 对应的运算符  '/'.

__mod 对应的运算符  '%'.

__unm 对应的运算符  '-'.

__concat 对应的运算符  '..'.

__eq 对应的运算符  '=='.

__lt 对应的运算符  '<'.

__le 对应的运算符  '<='.

 

元方法:

__index元方法:

通过键来访问 table 的时候,如果这个键没有值,那么Lua就会寻找该tablemetatable(元表,假定有元表)中的__index 键。如果__index包含一个表格,Lua会在表格中查找相应的键。

__index包含一个函数的话,Lua就会调用那个函数,table和键会作为参数传递给函数。

__index 元方法查看表中元素是否存在,如果不存在,返回结果为 nil;如果存在则由 __index 返回结果。

 

 

__newindex元方法:

 

__newindex 元方法用来对表更新,__index则用来对表访问。

 

当你给表的一个缺少的索引赋值,解释器就会查找__newindex 元方法:如果存在则调用这个函数而不进行赋值操作。

 

 

 

__call元方法:

 

Lua 调用一个值时调用。

 

 

 

__tostring元方法:

 

用于修改表的输出行为

 

 

具体使用方法:

Lua 元表(Metatable) | 菜鸟教程 (runoob.com)

posted @ 2021-05-21 11:00  邪心鳞宝  阅读(107)  评论(0编辑  收藏  举报