소품은 동반자 개체가있는 사례 클래스입니다. 스칼라 코드에서는 사람들이 객체를 구성하는 두 가지 주요 방법을 볼 수 있습니다. 하나는 클래스에 생성자가 있습니다. 또 다른 주요 방법은 컴패니언 개체에 대해 apply()
메서드를 호출하는 것입니다.
소스 코드 akka.actor.Props
을 보면 컴패니언 객체에 4 개의 apply()
메쏘드가 있으며 그 중 2 개가 위의 코드에서 참조하고 있음을 알 수 있습니다. 자신의 서명을 작성 당시에 있습니다
def apply[T <: Actor: ClassTag](): Props
def apply[T <: Actor: ClassTag](creator: ⇒ T): Props
로 투표 설탕 스칼라 당신이 Props[HelloActor]()
으로 그것을 다시 작성할 수 있습니다 첫 번째 예에서되도록이 방법을 적용 진술없이 적용 메서드를 호출 할 수 있습니다 컴파일러는 apply()
메소드를 삽입합니다. 다음에, 메소드에 인수가없는 경우, 괄호를 생략 할 수 있습니다. 그래서 위에서 언급 한대로 전화는 Props[HelloActor]
이됩니다.
두 번째 예에서는 두 번째 apply()
메서드를 호출합니다.
실제 HelloActor 클래스가 어떻게 좀 더 복잡해 지는지에 대한 질문과 관련하여. 명시 적으로 정의 된 apply()
메서드는 모두 결국 apply()
메서드를 호출합니다.이 메서드는 사례 클래스가되는 Props의 특성에 따라 생성됩니다. 이 적용은 akka.actor.IndirectActorProducer를 생성하는 Props의 생성자를 호출합니다. 이 클래스에는 액터를 인스턴스화하는 데 사용할 수있는 많은 전략이 있습니다. 간단한 경우에는 리플렉션을 사용하여 배우를 구성합니다.
너무 철저하고 요점. 덕분에 많이 – TrongBang
결국 다른 적용 방법에 의해 호출되는 특수 적용 방법에 대해 더 많이 알 수 있습니까? 그것은 akka에 특정한 무엇인가? 아니면 스칼라의 본질입니까? – TrongBang
특별한 apply() 메소드는 Scala에 포함되어 있으며 클래스에 case 키워드를 추가 할 때 만들어집니다. 따라서 생성하는 모든 사례 클래스에는 생성자와 동일한 매개 변수를 모두 포함하는 암시 적 apply() 메서드가 만들어집니다. – rancidfishbreath