前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >scala actor编程之对象传递

scala actor编程之对象传递

作者头像
随机来个数
发布2018-04-16 15:42:17
8050
发布2018-04-16 15:42:17
举报
文章被收录于专栏:写代码的海盗

scala 最吸引人的一点就是actor并发编程了。但是纵观scala官方文档,baidu文档,IBM文档都写的通过字符串传呀传,如果用作actor编程说明当然没有问题。但是在正式开放中,光传字符串就显的势单力薄了。

所以如何传对象呢?

先看通过字符串传递消息的模型:

消息接收类:

代码语言:javascript
复制
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
      
    }
}

消息发送类

代码语言:javascript
复制
object ActorSed {

  def main(args: Array[String]): Unit = {
    var ar = new ActorRev1()
    ar.start
   
    ar!"111"
  }

}

执行ActorSed,看一下结果:

代码语言:javascript
复制
There is say 111

这个结果是最简单通过字符串传递消息的,那么我们改造一下,看看如何传递对象。

首先,添加一个class。

代码语言:javascript
复制
class ActorDeal {
    
  var msg:String=""
  
  def dealPrint() = {
    println("From deal " + msg)
  }
}

然后改造消息接受类:

代码语言:javascript
复制
 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,我们对发送类稍加改造即可测试:

代码语言:javascript
复制
 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,我们可以看结果了:

代码语言:javascript
复制
1 There is say 111
2 From deal HEHE

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014-08-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档