cc(self)是什么?

分别找到这2句代码:
复制代码
  1. cc(self):addComponent("components.behavior.EventProtocol"):exportMethods()
  2. cc.GameObject.extend(self):addComponent("components.behavior.EventProtocol"):exportMethods()

所以 cc(self) 就等于调用 cc.GameObject.extend(self) 。

----------------------------------------------------------------------------
原因是因为再 framework/cc/init.lua 中有这样一段定义:
复制代码
  1. cc.GameObject = import(".GameObject")
  2. local GameObject = cc.GameObject
  3. local ccmt = {}
  4. ccmt.__call = function(self, target)
  5.     if target then
  6.         return GameObject.extend(target)
  7.     end
  8.     printError("cc() - invalid target")
  9. end
  10. setmetatable(cc, ccmt)


这段代码定义了 cc() 的执行行为,也就是 __call 的调用效果。

Ps:如果不知道 __call 什么意思的可以看一下这里的解释

[lua] __call metamethod的用处 (如下)

自认为跟C++中的functor比较像,C++中的functor就是重载了operator()的对象,当把一个C++对象当成函数一样调用obj()时,实际上启动了对于obj的operator()的调用,于是一个可被调用的对象就产生了,如果写成obj.()可能会比较符合对象方法的一般做法。

lua table如果设置了metamethod __call,调用对象luaobj()时,会调用到__call方法,具体调用机制跟其它的metamethod没有什么区别。一段简单的代码说明问题:

  1. ev={}
  2. functin ev.__call()
  3.   print "called from ev"
  4. end

  5. setmetatable(ev, ev)

  6. -- test it
  7. ev()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值