zoukankan      html  css  js  c++  java
  • 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

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

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

  • 相关阅读:
    Undergound Heaven [only_for_information]
    Essential Booklist of .Net Framework
    Thinkpad T4x 风扇转速档位控制
    Hot scene AGAIN!
    JavaScript使用技巧精萃
    今天项目中遇到的一个问题:判断新闻Id是否存在
    C++编译过程中"没有找到MFC80UD.DLL,因此这个程序未能启动.重新安装应用程序可能会修复此问题"? 的彻底解决
    SQL操作全集
    关于UrlReferrer传值的几点注意
    在ASP.Net2.0中使用UrlRewritingNet实现链接重写(转)
  • 原文地址:https://www.cnblogs.com/vikings-blog/p/3941947.html
Copyright © 2011-2022 走看看