Scala Actor с несколькими каналами - PullRequest
1 голос
/ 22 января 2012

У меня есть актер, который может обрабатывать сообщения разных типов, я пытаюсь использовать 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

Спасибо

1 Ответ

0 голосов
/ 22 января 2012

Вам не нужны каналы.Попробуйте что-то вроде этого:

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

Очевидно, что handleString и handleInt - это некоторые частные функции, которые вы должны определить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...