Lua核心编程之进阶&总结


1、Metatable

1)metatable是用来定义一个table的行为的table。
2)table默认行为可以进行遍历,但table不能相加, metatable允许改变默认行为。

3)Lua中每个table都可以有meltable 

4)新表默认是不带metatable的
测试:

t = {} 
print(getmetatable(t))  --> nil

5)任何表可是其它表的metatable, 一组相关表可以共享一个metatable, 个表也可以是自身的metatable。
测试:

t1= {}
setmetatable(t, t1) 
assert(getmetatable(t) == t1)
个人觉得这里很难理解,找到一个详细的博客 http://www.jb51.net/article/56690.htm

2、metamethods用途

Lua为table的metatable提供一组预定义操作函数,
这些函数叫metamethods。 当执行table某些操作的时候,会去寻找table中是否有
这个操作对应的metamethods,如果有执 函数并返 回结果,否则操作报错。

local mt = {}
function mt.__add(a, b)
    return 'table + ' .. b
end
local t = {}
setmetatable(t, mt)
print(t + 1)

每个算术操作符有对应的 metamethod:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值