Ниже класса вызывает ошибку на линии новой HelloWorld:Как начать Scala AKKA актера
Exception in thread "main" akka.actor.ActorInitializationException: You cannot create an instance of [HelloWorld] explicitly using the constructor (new). You have to use one of the 'actorOf' factory methods to create a new actor. See the documentation.
at akka.actor.ActorInitializationException$.apply(Actor.scala:219)
at akka.actor.Actor$class.$init$(Actor.scala:436)
at HelloWorld.<init>(HelloWorld.scala:4)
at Driver$.main(HelloWorld.scala:38)
at Driver.main(HelloWorld.scala)
Так я стараюсь: val hw = actorOf(new HelloWorld)
Но это приводит к ошибке компилятора:
not found: value actorOf
Как следует Ниже приведен пример HelloWorld?
Чтение других документов Scala требует, чтобы метод действия был определен внутри класса, который расширяет действие, а затем вызывает метод start в этом классе, есть ли причина использовать actorOf вместо определения метода act?
Ниже класса берется из Scala AKKA документы http://doc.akka.io/docs/akka/2.2.0/scala.html:
import akka.actor.Actor
import akka.actor.Actor._
import akka.actor.Props
class HelloWorld extends Actor {
override def preStart(): Unit = {
// create the greeter actor
val greeter = context.actorOf(Props[Greeter], "greeter")
// tell it to perform the greeting
greeter ! Greeter.Greet
}
def receive = {
// when the greeter is done, stop this actor and with it the application
case Greeter.Done => context.stop(self)
}
object Greeter {
case object Greet
case object Done
}
class Greeter extends Actor {
def receive = {
case Greeter.Greet =>
println("Hello World!")
sender ! Greeter.Done
}
}
}
object Driver {
def main(args: Array[String]) {
new HelloWorld
}
}
act() и start() принадлежат старым и устаревшим актерам Scala, Akka - это другая актерская реализация, пожалуйста, обратитесь к документам по адресу http://akka.io. –
@RolandKuhn благодарит за ссылку, после некоторого копания этот документ доказывает свою полезность: http://doc.akka.io/docs/akka/snapshot/scala/actors.html#actors-scala –