使用Scala Actor时最差(或最好的)编程习惯?

原创
开发 后端
Scala Actor是Scala语言的一大亮点。本文是一则有关Scala Actors的问答,问题是:在使用Scala Actors的时候有哪些最差的使用习惯?

【51CTO快译】前日,在stackoverflow上有一则关于Scala Actor的问题,很有代表性。该问题的答案对于学习Scala Actor的开发者会有一些帮助。这个问题是:

在使用Scala Actors的时候有哪些最差的使用习惯?

(如果还没有执行最好编程习惯的自信,那么先注重回避最差的习惯倒不失为一个很好的想法。不过事实上下面这些答案中已经在建议一些优良的使用习惯了。)

51CTO编辑推荐:Scala编程语言专题

下面是一份不错的答案(译文):

◆任何地方都不要使用!?,否则会造成系统锁定。

◆总是从actor类子系统线程发送消息。如果这意味着要通过actor.actor方法创造一个暂时的actor类,那么代码如下:

  1. case ButtonClicked(src) => Actor.actor { controller ! SaveTrade(trdFld.text) }   

◆给你的actor的反应(reactions)加一个“其它消息”处理程序。否则就不可能判断你是否在给一个错误的actor类发送消息:

  1. case other => log.warning(this + " has received unexpected message " + other  

◆对于你的原始actor类,不要使用actor.actor方法,而是用actor类的子类(subclass)。这么做的原因是只有通过子类你才能提供一个敏感toString方法。还有,如果你的日志中到处都有像下面的声明的话,调试actor类将非常的困难:

  1. 12:03 [INFO] Sending RequestTrades(2009-10-12) to scala.actors.Actor$anonfun$1  

◆把你系统中的actor类整理成文档,并明确注明它们接受什么消息,以及它们怎么精确的计算响应。使用actor类会导致标准程序(一般是用一个方法压缩)通过多个actor类之间的响应变成一个复杂的逻辑网络。没有好的文档管理很容易搞混。

◆保证你可以跟你的actor类在响应循环之外进行通信,从而确定它的状态。举个例子,我总是声明一个方法,使用一个和下面的编码类似的MBean调用。否则,很难看出你的actor类是在运行,还是已经关掉,是否有一大长串消息等等。

  1. def reportState = {   
  2.   val _this = this   
  3.   synchronized {   
  4.     val msg = "%s Received request to report state with %d items in mailbox".format(   
  5.                    _this, mailboxSize)    
  6.     log.info(msg)   
  7.   }   
  8.   Actor.actor { _this ! ReportState }   
  9. }   

◆把你的actors连在一起并把trapExit设置成true,否则它们会悄无声息的失败,这意味着你的程序不会按你所设计的执行,并且当消息留在actor的邮箱里时程序会溢出存储器。

对于以上这些Scala Actors的使用建议,你有什么看法么?

【编辑推荐】

  1. 从Java走进Scala:一步步教你使用Scala Actor
  2. Scala Actor:多线程的基础学习
  3. 十二步学会Scala(1):从下载安装到定义方法
  4. Scala讲座:面向对象和函数式的特点总结
  5. 万物皆对象:介绍Scala对象
责任编辑:yangsai 来源: 51CTO.com
相关推荐

2010-01-15 09:15:09

Scala Actor并发

2009-08-03 11:07:18

Scala Actor

2009-08-14 11:35:01

Scala Actor

2011-04-13 10:16:41

编程习惯

2018-11-07 10:20:20

职业科技淘汰

2010-09-14 15:34:41

Scala

2009-07-09 00:25:00

ScalaSet类Map类

2009-07-09 00:25:00

ScalaListTuple

2017-09-01 11:01:22

开发编程习惯

2015-08-17 10:13:35

ios习惯高效

2011-03-29 12:41:49

编程

2009-09-24 09:41:00

Scala讲座Scala

2010-11-17 11:31:22

Scala基础面向对象Scala

2009-06-05 12:54:03

ScalaActor内存泄露

2015-11-16 10:59:02

流量提速降费应用软件

2015-08-20 10:50:33

iOS高效编程习惯

2014-03-06 09:43:54

代码编程习惯

2009-07-24 18:02:46

ASP.NET编程

2010-09-14 13:22:17

Scala编程指南Scala

2023-01-12 23:21:15

编程GCC 标志Linux
点赞
收藏

51CTO技术栈公众号