使用Scala Actor时最差(或最好的)编程习惯?
在使用Scala Actors的时候有哪些最差的使用习惯?
(如果还没有执行最好编程习惯的自信,那么先注重回避最差的习惯倒不失为一个很好的想法。不过事实上下面这些答案中已经在建议一些优良的使用习惯了。)
51CTO编辑推荐:Scala编程语言专题
下面是一份不错的答案(译文):
◆任何地方都不要使用!?,否则会造成系统锁定。
◆总是从actor类子系统线程发送消息。如果这意味着要通过actor.actor方法创造一个暂时的actor类,那么代码如下:
case ButtonClicked(src) => Actor.actor { controller ! SaveTrade(trdFld.text) }
◆给你的actor的反应(reactions)加一个“其它消息”处理程序。否则就不可能判断你是否在给一个错误的actor类发送消息:
case other => log.warning(this + " has received unexpected message " + other
◆对于你的原始actor类,不要使用actor.actor方法,而是用actor类的子类(subclass)。这么做的原因是只有通过子类你才能提供一个敏感toString方法。还有,如果你的日志中到处都有像下面的声明的话,调试actor类将非常的困难:
12:03 [INFO] Sending RequestTrades(2009-10-12) to scala.actors.Actor$anonfun$1
◆把你系统中的actor类整理成文档,并明确注明它们接受什么消息,以及它们怎么精确的计算响应。使用actor类会导致标准程序(一般是用一个方法压缩)通过多个actor类之间的响应变成一个复杂的逻辑网络。没有好的文档管理很容易搞混。
◆保证你可以跟你的actor类在响应循环之外进行通信,从而确定它的状态。举个例子,我总是声明一个方法,使用一个和下面的编码类似的MBean调用。否则,很难看出你的actor类是在运行,还是已经关掉,是否有一大长串消息等等。
def reportState = { val _this = this synchronized { val msg = "%s Received request to report state with %d items in mailbox".format( _this, mailboxSize) log.info(msg) } Actor.actor { _this ! ReportState } }
相关推荐
匆匆那些年 2020-10-15
TheBigBlue 2020-07-28
shenwenjie 2020-07-07
muhongdi 2020-07-07
waitwolf 2020-07-08
yunfenglee 2020-07-08
yunfenglee 2020-07-08
kekeromer 2020-07-08
匆匆那些年 2020-07-07
liqinglin0 2020-07-05
TheBigBlue 2020-07-05
kekeromer 2020-06-13
zhixingheyitian 2020-06-08
TheBigBlue 2020-06-06
liqinglin0 2020-06-01
liqinglin0 2020-06-01
yunfenglee 2020-05-30
MICKEYSTUDY 2020-05-28
muhongdi 2020-05-19