语法糖,来得更猛烈些才好.

29岁想换行 http://www.cocoachina.com/bbs/read.php?tid=110794&page=5
我留了言, “专才有行市.
全世界就你一人会.你就牛掰了. 如果你会的东西,随便谁都能3个月速成的话,就值得思考了.”

其实又何尝不是写给我自己的呢. 今天写了一个函数,我觉得自己还算有那么一点点灵气.但这种闪光点估计只有识货的才有感觉. 我会努力来回忆一些类似的case,分享给大家.

长话短说:这个问题来源于最近的工作. 一个基于bw的rpc framework. 然而mailbox是不可以在后台线程里被调用的. 这种情况是因为 基于socket的数据包处理函数会调用实体的函数. 而恰恰socket的主循环是thread的.

比如: onHandleLogin(packet): accEntity.doLogin() .而以前在bw里面的脚本是没问题的.
我忍了很久以后花了5分钟, 把10年写的一个函数改了改. 变成了一个优雅的修饰.

然后上面的函数就改成了
@AsynCall

def onHandler ….
具体如下:
def AsynCall( function ):
“””
create timer to call function. avoid error:”AttributeError: Mailbox property is not available in background threads ”
by cnsoft 2012-07-31
“””
def checkIfLimited( self, *args, **kwargs ):
#assert isinstance( self, BigWorld.Base )
#if not self.checkCoolDown(str(function.__name__),cdT):
# return function( self, *args, **kwargs )
#else:
# pass
def realcall(orig_func,*_args):
return orig_func( self, *args)#, **kwargs )
#convert to function object. first
func = partial(realcall,function,args)
self._pendid +=1
funckey = ‘pubxxx_%d’%self._pendid
setattr(self,funckey,func)
self.addTimer(0,0,self._pendid)
return checkIfLimited

其实语法糖有时候挺害人的,会把人的思维拘束.我现在光剩下思想了…不知道除了python 还能找到别的工作不了.

以前被sun糊弄了,java是跨平台,结果是各家jvm不一样的实现,现在看到的东西haxe 是个好玩意.一种语法,多种产出.显然为了多平台又节省开发成本是业内的诉求. unity3d的思路也差不多,一种制作,多种产出. 最跨平台的其实是c++.而且是无缝的. 所以andriod 有NDK 来靠拢 c++, flex 也有 alchemy 想穿c++的裤子.而于python, pypy 让常规开发不换语言的情况下 提高性能.. 以后注定也会有python般的语法, c++般的产出.给我这样的家伙留个活路..

Read More