scala 最吸引人的一点就是actor并发编程了。但是纵观scala官方文档,baidu文档,IBM文档都写的通过字符串传呀传,如果用作actor编程说明当然没有问题。但是在正式开放中,光传字符串就显的势单力薄了。
所以如何传对象呢?
先看通过字符串传递消息的模型:
消息接收类:
import scala.actors.Actor
import org.andy.rtbd.actor.ActorDeal
class ActorRev1 extends Actor{
def act()={
while(true){
receive {case str:String =>println("There is say "+str)
case _=>println("There is no message ")
}
}
}
def dealAD(adm:ActorDeal)={
adm.dealPrint
}
}
消息发送类
object ActorSed {
def main(args: Array[String]): Unit = {
var ar = new ActorRev1()
ar.start
ar!"111"
}
}
执行ActorSed,看一下结果:
There is say 111
这个结果是最简单通过字符串传递消息的,那么我们改造一下,看看如何传递对象。
首先,添加一个class。
class ActorDeal {
var msg:String=""
def dealPrint() = {
println("From deal " + msg)
}
}
然后改造消息接受类:
1 import scala.actors.Actor
2 import org.andy.rtbd.actor.ActorDeal
3
4 class ActorRev1 extends Actor{
5
6 def act()={
7 while(true){
8 receive {
9 case ad:ActorDeal => dealAD(ad)
10 case str:String =>println("There is say "+str)
11 case _=>println("There is no message ")
12 }
13 }
14 }
15
16 def dealAD(adm:ActorDeal)={
17
18 adm.dealPrint
19
20 }
21 }
高亮的部分是新增的消息接收选项,so easy,我们对发送类稍加改造即可测试:
1 object ActorSed {
2
3 def main(args: Array[String]): Unit = {
4 var ar = new ActorRev1()
5 ar.start
6 var adm = new ActorDeal
7 adm.msg="HEHE"
8
9 ar!"111"
10 ar!adm
11 }
12
13 }
OK,我们可以看结果了:
1 There is say 111
2 From deal HEHE
虽说,代码量很小,但找了半天都没找到这方面的资料。自己苦逼看了半天,才蒙出来的。
如果对您有用的话,请推荐一下。谢谢