Я экспериментировал с картой актеров, и хотел бы знать, как создать экземпляр их и запускать их одним махом ...инстанцировании и начать Актера Scala в карте
import scala.actors.Actor
import scala.actors.Actor._
import scala.collection.mutable._
abstract class Message
case class Update extends Message
object Test {
val groupings = "group1" :: "group2" :: "group3":: Nil
val myActorMap = new HashMap[String,MyActor]
def main(args : Array[String]) {
groupings.foreach(group => myActorMap += (group -> new MyActor))
myActorMap("group2").start
myActorMap("group2") ! Update
}
}
class MyActor extends Actor {
def act() {
loop {
react {
case Update =>
println("Received Update")
case _ =>
println("Ignoring event")
}
}
}
}
Линия :
myActorMap("group2").start
захватит второй экземпляр, и позвольте мне начать, но я хотел бы быть в состоянии сделать что-то подобное:
groupings.foreach(group => myActorMap += (group -> (new MyActor).start))
, но независимо от того, как я обертываю нового актера, компилятор жалуется на что-то по строкам:
тип несоответствие; найдено: scala.actors.Actor требуется: com.myCompany.test.MyActor
или различные другие жалобы. Я знаю, что это должно быть что-то простое с анонимными классами, но я не вижу его прямо сейчас. Какие-либо предложения? Заранее спасибо!!
Это работает, спасибо. –
Не очень FP. Я думаю, что подход Rex (стиль продолжения?), Вероятно, помогает минимизировать код при использовании в разных контекстах. –
Шахта не СР. Он просто использует удобный квазифункциональный метод (с неявными преобразованиями). –