metatable

metatable(obj)[event]
metatable(obj)是获取数据obj的元表
metatable(obj)[event]获取元表中某个事件的具体操作,event有__add, __index ...等

__index操作 The indexing access table[key]

function gettable_event (table, key)
 local h
 if type(table) == "table" then
   local v = rawget(table, key)
   if v ~= nil then return v end
   h = metatable(table).__index
   if h == nil then return nil end
 else
   h = metatable(table).__index
   if h == nil then
     error(···)
   end
 end
 if type(h) == "function" then
   return (h(table, key))     -- call the handler
 else return h[key]           -- or repeat operation on it
 end
end

例子在脚本 一个对象的 userdata 比如是 hFrame 调它的函数 SetSize()
hFrame:SetSize()

hFrame:SetSize 的操作== hFrame.SetSize  == hFrame["SetSize"]

这是 会调用 hFrame 这个基本数据类型的 元表__index操作事件
gettable_event(hFrame, "SetSize")

发现type(hFrame)不等于 "table", 获取hFrame这个数据类型自身的元表中的_index操作
h = metatable(table).__index

然后自身元表中的 SetSize函数 h["SetSize"]


前提:
1.在c里面,生成一个新的元表,把 需要给lua调的函数 也就是行为 如 SetSize注册到这个元表中

2.在lua中获取 hFrame 对象时,把这个对象的元表设置成 第1条中生成的元表的行为

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值