저는 Akka를 스칼라로 액터 모델 프로그래밍에 사용하고 있으며, 제 구조의 일부 기능을 완벽하고 충분히 사용하기 위해 Scala 추상 클래스에서 Akka ActorRef 로의 암시 적 변환을 사용하기로 결정했습니다. 그것은 이런 식입니다 :Akka ActorRef에 대한 스칼라 암시 적 변환은 Akka의 send 연산자 "!"에 대한 액세스를 차단합니다. 왜 그런가?
다음abstract class A {
val actor = system.actorOf(Props(new C),"dummy")
def send(msg: String) = actor ! msg // This compiles fine
}
class C extends akka.actor.Actor {
def receive = {case msg => println(msg)}
}
implicit def AtoC(a: A) = a.actor
내가 이런 식으로 사용
class D extends A
val d = new D
일반적으로, 그리고 변환이 잘 작동하기 때문에, 난 그냥 D에 배우에게 메시지를 보낼 수 있어야합니다 이 수행하여 :
:d ! message // This does not compile
그러나 그것은 분명히 허용하지 않는다을, 이것은 내가 아직도 텔 방법을 사용할 수 있기 때문에 큰 문제가되지 않습니다
d.tell(message)
"!" 이 전환을 대신 사용하여 :
implicit def AtoC(a: A) = a.actor.asInstanceOf[ScalaActorRef]
그러나이 작업을 수행하면 ActorRef 메서드를 사용할 수 없습니다. 나는 "!"을 사용할 수 없게 살 수있다. 그러나 왜 전환이 그러한 행동을 일으키는 지 이해하고 싶습니다. 그렇지 않으면 무엇인가 놓치고 있습니까?
감사합니다.