Lua 元表(metatable)

Lua中每个值都有一个元表。 这个元表就是一个普通的Lua 表,它用于定义原始值在特定操作下的行为。如果你想改变一个值在特定操作下的行为,你可以在它的元表中设置对应域。例如,当你对非数字值做加操作时, Lua 会检查该值的元表中的 “__add” 域下的函数。 如果能找到,Lua 则调用这个函数来完成加这个操作。


使用 setmetatable 来替换一张表的元表。在Lua中,你不可以改变表以外其它类型的值的元表, 若想改变这些非表类型的值的元表,要使用 C API。

setmetatable (table, metatable)
给指定表设置元表。 (你不能在 Lua 中改变其它类型值的元表,那些只能在 C 里做。)如果 metatable 是 nil, 将指定表的元表移除。 如果原来那张元表有 "__metatable" 键值,则会失败并抛出一个错误。

可以用 getmetatable 函数 来获取任何值的元表

getmetatable (object)
如果 object 不包含元表,返回 nil 。 否则,如果在该对象的元表中有 "__metatable" 键值时返回其关联值, 没有时返回该对象的元表。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值