繁体   English   中英

具有多个频道的Scala Actor

[英]Scala Actor with multiple Channels

我有一个可以处理不同类型消息的actor,我正在尝试使用Channel来确保类型安全:

import scala.actors._
import scala.actors.Actor._

case class Message(msg: String)

class FirstActor extends Actor {

  val Chan1 = new Channel[String](this)
  val Chan2 = new Channel[Int](this)

  def act() {

    loop {

        react {
                case Chan1 ! msg => println("message channel1=" + msg); sender ! None
                case Chan2 ! num => println("number channel2=" + num); sender ! None
        }
    }

  }  

}

但是,编译器抱怨:

<console>:46: error: type mismatch;
 found   : scala.actors.Channel[String]
 required: scala.actors.Channel[Any]
Note: String <: Any, but class Channel is invariant in type Msg.
You may wish to investigate a wildcard type such as `_ <: Any`. (SLS 3.2.10)
           case Chan1 ! msg => println("message channel1=" + msg); sender ! None

我已经尝试过.asInstanceOf[Channel[Any]] ,但是似乎模式永远不匹配

在Actor中使用多个通道的正确方法是什么?

我正在使用Scala 2.9

谢谢

您不需要频道。 尝试这样的事情:

react{
  case str: String => handleString(str)
  case i: Int => handleInt(i)
  case _ => println(this+": wrong message")
}

显然,handleString和handleInt是您应该定义的一些私有函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM