[英]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.