LUA基础-6 metatable(元表)

元表主要是控制对象在如:算术运算、顺序比较、连接、长度运算、索引、调用以及其他操作的行为,他以普通的TABLE方式存在,简单的说就是对特定的名称赋于方法(函数)来控制特定的操作。你不能从 Lua 中改变TABLE之外其它任何类型的值的 metatable , 要这样做的话必须使用 C API 。

--你可以通过 getmetatable 函数来查询 table 的 metatable。
strmt = getmetatable(tabname)
--你可以通过 setmetatable 函数来替换 table 的 metatable 。
setmetatable({},{})

--直接获取table 本身的内容,不运行__index元方法
rawget (table, key)

--直接赋值table 本身的内容,不运行__newindex元方法
rawset (table, key, value)

--示例
mytable={}
setmetatable(mytable,{})
strmt = getmetatable(mytable)

__index 元方法

--获取 TABLE 中没有的KEY , LUA会在__index里找
mytab = {}
print(mytab.x)   --nil

mymetatab  = {__index={x=1;}}
setmetatable(mytab,mymetatab)
print(mytab.x)   --1

__newindex 元方法

--赋予TABLE 中没有的 KEY , LUA会在 __newindex里找

mytab = {}
mymetatab  = {
	__newindex=function(t,k,v)
        print("没有在TABLE找到对应的"..k)
	end
}
setmetatable(mytab,mymetatab)

__call 元方法

--当table 当成表达式使用的时候 lua会查找__call 元方法

mytab = {}
mymetatab  = {
	__call=function(_,t)
		print("表达式调用成功!")
	end
}
setmetatable(mytab,mymetatab)
mytab()

元方法列表

__index

对应访问值table[key]或table.key

__newindex

对应赋值 table[key]=val或table.key=val

__call

对应函数运行 table()

__add

对应的运算符 ‘+’

__sub

对应的运算符 ‘-’

__mul

对应的运算符 ‘*’

__div

对应的运算符 ‘/’

__mod

对应的运算符 ‘%’ 求余

__pow

对应的运算符 ‘^’ 幕操作

__unm

对应的一元运算符 ‘-’,负数

__concat

对应的运算符’..’ 连接操作

__eq

对应的运算符’==’ 比较操作

__lt

对应的运算符’<’

__le

对应的运算符’<=’

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸿石散人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值