Props是一個包含伴侶對象的案例類。在Scala代碼中,您將看到人們構建對象的兩種主要方式。一個是在一個類上的構造函數。另一個主要方法是在伴侶對象上調用apply()
方法。
如果您查看akka.actor.Props
的源代碼,您會發現伴侶對象有四個apply()
方法,其中兩個在上面的代碼中引用。在撰寫他們的簽名時間爲:
def apply[T <: Actor: ClassTag](): Props
def apply[T <: Actor: ClassTag](creator: ⇒ T): Props
樂於助人糖斯卡拉可調用的應用方法,無需說明的適用方法,以便在你的第一個例子中,你可以重寫爲Props[HelloActor]()
和編譯器會爲您插入apply()
方法。接下來,如果一個方法沒有參數,你可以省略括號。正如你在上面指出的那樣,這個呼叫變成Props[HelloActor]
。
你的第二個例子調用第二個apply()
方法。
至於你的問題,真正的HelloActor類是如何實例化,有點複雜。所有明確定義的apply()
方法最終都會調用一個特殊的方法,該方法是由作爲案例類的Props的本質生成的。這適用於在創建akka.actor.IndirectActorProducer的Props上調用構造函數。這個類包含許多可用於實例化actor的策略。在你的簡單情況下,它最終使用反射來構建你的演員。
這麼徹底和重點。非常感謝 – TrongBang
我可以瞭解更多關於最終由其他應用方法調用的特殊應用方法。這是特定於阿卡嗎?或者它是scala的本質? – TrongBang
特殊的apply()方法是Scala的一部分,在將case關鍵字添加到您的類時創建。因此,您創建的任何案例類都將創建一個隱式的apply()方法,該方法的所有參數都與您的構造方法相同。 – rancidfishbreath