关于元表,self,元方法__index

时间:2023-03-09 18:49:23
关于元表,self,元方法__index

这是需要仔细分辨的几个概念.

元表:相当于table的隐藏属性.

  • 只有固定的一些方法,如__index,__tostring,__add等,称为元方法.
  • 虽然是固定的,但是任何table都可以作为任何值的元表,实际只会赋值对应的值.

self:

  • 相当于调用方.定义的时候和调用的时候都用冒号,语法糖.

__index:

  • 相当于隐藏属性,相比于元表,元表是固定的隐藏属性,而__index是自己定义的任意属性.
  • 和__newindex都会有循环调用(即死循环),报错loop in settable.

__add(a, b) --加法 
__sub(a, b) --减法 
__mul(a, b) --乘法 
__div(a, b) --除法 
__mod(a, b) --取模 
__pow(a, b) --乘幂 
__unm(a) --相反数 
__concat(a, b) --连接 
__len(a) --长度 
__eq(a, b) --相等 
__lt(a, b) --小于 
__le(a, b) --小于等于 
__index(a, b) --索引查询,使用rawget(k,v)进行原始的访问. 
__newindex(a, b, c) --索引更新,赋值隐藏属性,rawset(t,k,v)进行原始赋值. 
__call(a, ...) --执行方法调用 
__tostring(a) --字符串输出 
__metatable --保护元表