脚本小子_Lua元表与元方法

一、Lua元表与元方法

Lua中每种类型都有其对应的取值范围和对应的操作方法。比如整形,只能取数字值和其操作方法: 加减乘除。但是,在操作table类型时,却无法将两个table相加,因为table没有定义相加的操作。而元表则是来补充这块的不足。元表可以通过修改一个值得行为,使其在面对一个非预定义的操作时,去执行一个指定的操作。比如,定义好table,相加这个操作的元表。当table a+b操作时,lua解析器就是判断两者之一是否有定义该操作的元表。如果找到,则执行该定义的方法。如无则提示对应的提示信息。
1、元表与元方法
从上面的说明,可以知道,元表是补充内置没有定义的方法。但是其元表本身是k-v的类型,k只能是内置属性描述字符,而v则只能是具体的操作方法。则该值就是所谓的"元方法",Lua中的每个值都有一个元表。table和userdata都有各自独立的元表,而其它类型的值则共享其类型所属的单一的元表。而lua中创建table时是不会帮其创建元表
2、setmetatable和getmetatable、__metatable
  • setmetatable设置元表,格式 setmetatable(table,table1)
  • getmetatable获取元表,格式 getmetatable(table)
  • __metatable设置元表的元表,禁止元表设置
2.1、例子
local t = {}
print(getmetatable(t))
local t1 = {}
setmetatable(t,t1)
print(getmetatable(t) == t1)
local t = {}
setmetatable(t,{__metatable = "not to do."})
setmetatable(t,{})
3、元表类型
3.1、算术类型
属性值
作用
__add
相加,格式 function(table1,table2)
__mul
相乘,格式 function(table1,table2)
__sub
相减,格式 function(table1,table2)
__div
相除,格式 function(table1,table2)
__unm
相反数,格式 function(table1,table2)
__mod
取模,格式 function(table1,table2)
__pow
乘幂,格式 function(table1,table2)
  
3.2、关系类型
属性值
作用
__eq
等于,格式 function(table1,table2)
__lt
小于,格式 function(table1,table2)
__le
小于等于,格式 function(table1,table2)
备注: 关系类型中没有其它像不等于、大于、大于等于。lua都会转换成上述三种。
3.3、table访问的元方法
属性值
作用
__index
table引用索引时,调用,格式 function(table1,k)
__newindex
table对不存在的属性赋值时,调用,格式 function(table1,k,v)
  
3.4、其它操作
属性值
作用
__call
tabled调用一个值时,调用。格式 function(table1,table2)
__tostring
修改表的输出行为 时,调用,格式 function(table1)
  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值