У меня есть актер, который может обрабатывать сообщения разных типов, я пытаюсь использовать 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]]
, но кажется, что шаблон никогда не совпадает
Как правильно использовать несколько каналов внутри актера?
Я использую scala 2.9
Спасибо