Я прочитал много примеров определения класса участников для создания программы. Я замечаю, что все они используют тип ActorRef
. Например,Почему аккор-актер использует ActorRef как тип paramater, а не сам тип?
class LogProcessor(dbWriter: ActorRef)
extends Actor with ActorLogging with LogParsing {
import LogProcessor._
def receive = {
case LogFile(file) =>
val lines: Vector[DbWriter.Line] = parse(file)
lines.foreach(dbWriter ! _)
}
}
фактический тип по dbWriter
«s является DBWriter
определяется как:
class DbWriter(databaseUrl: String) extends Actor {
val connection = new DbCon(databaseUrl)
import DbWriter._
def receive = {
case Line(time, message, messageType) =>
connection.write(Map('time -> time,
'message -> message,
'messageType -> messageType))
}
override def postStop(): Unit = {
connection.close()
}
}
На примере, почему бы не использовать DbWriter
как тип dbWriter в?
Если мы используем ActorRef
в любом месте, программа просто выглядит как система слабого типа.
Кроме того, аккерский актер использует метод actorOf
для создания дочернего актера, и он возвращает ActorRef.I также путают, почему бы не вернуть реальный тип актера?
Все это объясняется в документации Akka: HTTP: // документ .akka.io/docs/akka/2.4/general/actors.html – Ryan