我已經閱讀了很多演員定義類的例子來構建一個程序。我注意到的是他們都使用ActorRef
作爲參數類型。例如,爲什麼akka actor使用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
,out程序看起來就像是一個弱類型系統。
此外,Akka演員使用actorOf
方法創建小孩演員並返回ActorRef.I也混淆爲什麼不返回演員的真實類型?
所有這一切都在阿卡文檔解釋溝通其他演員:HTTP:// DOC .akka.io/docs/akka/2.4/general/actors.html – Ryan