【视频教程】两小时学会用Cocos2d-lua开发游戏.
Lua中handler方法的原理详解
1:self.game_:addEventListener(Game.PLAYER_DEAD_EVENT, handler(self, self.onPlayerDead_)) —— handle 、
2: local BugBase = class("BugBase”) —— 就一个参数???
3: local BugAnt = class("BugAnt", BugBase) 父类 当传入的是一个对象时,会以传入的对象为父类派生下来。
-----------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
1:源码:
1
2
3
4
5
|
function handler(obj, method)
returnfunction(...)
return
method(obj,...)
end
end
|
由此不难发现handler通过接收的两个参数obj, method创建了一个匿名函数并将其返回,并且调用匿名函数时所传入的参数也将传入method方法中,作为obj后面的参数。
好吧我们看看它的用法:
既然通过handler封装返回的是一个匿名函数,所以可以这样调用
1
2
3
4
5
6
|
localcls = {}
cls._m =
"close"
function cls:onClose()
print(self._m)
end
handler(cls,cls.onClose)()
|
结果为:
close
此时我们通过handler将cls作为cls.onClose的第一个参数传入,此时执行返回的匿名函数时则等价于cls.onClose(cls)由于传入的参数就是其本身所以self就是cls也即等价于cls:onClose(),所以此代码段打印出close。
如果第一个参数不是它自己的话由上面的测试代码可以知道那样就不会是我们想要的结果了。
- math.randomseed(os.time())
- ----然后不断产生随机数
- for i=1, 5 do
- print(math.random())
- end