ich mit einer Karte von Schauspieler bin zu experimentieren, und würde gerne wissen, wie sie instanziieren und sie auf einen Schlag starten ...Instanziierung und Start einer Scala Schauspieler in einer Karte
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")
}
}
}
}
Die Linie :
myActorMap("group2").start
wird die zweite Instanz, packen und ich lassen starten, aber ich würde etwas mehr wie können, gerne tun:
groupings.foreach(group => myActorMap += (group -> (new MyActor).start))
aber egal wie ich den neuen Aktor einpacke, beschwert sich der Compiler mit etwas in der Art:
Typ Mismatch; gefunden: scala.actors.Actor erforderlich: com.myCompany.test.MyActor
oder verschiedene andere Beschwerden. Ich weiß, dass es mit anonymen Kursen etwas Einfaches zu tun hat, aber ich kann es jetzt nicht sehen. Irgendwelche Vorschläge? Danke im Voraus!!
Das funktioniert, danke. –
Nicht sehr FP, obwohl. Ich denke, dass Rex 'Ansatz (Continuation-Passing-Stil?) Wahrscheinlich hilft, den Code zu minimieren, wenn er in verschiedenen Kontexten verwendet wird. –
Mine ist nicht CP. Es verwendet nur eine praktische quasi-funktionale Methode (mit impliziten Konvertierungen). –