scala actor编程之对象传递

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

虽说,代码量很小,但找了半天都没找到这方面的资料。自己苦逼看了半天,才蒙出来的。

如果对您有用的话,请推荐一下。谢谢

你可能感兴趣的:(scala)