我已经阅读了许多用于构建程序的actors类定义的示例。我注意到他们所有人都使用ActorRef
作为参数类型。例如,
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
的实际类型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
,那么程序看起来就像一个弱类型系统
此外,Akka actor使用actorOf
方法创建子actor并返回ActorRef.I也混淆了为什么不返回actor的真实类型?
答案 0 :(得分:0)
关于演员的一些评论: