2009-12-03 3 views
0

액터 내에서 다른 액터에게 메시지를 보내는 클래스를 만들어야합니다. 다른 배우 배우에 회신해야다른 클래스에서 보낼 때 올바른 스칼라 액터 발신자 참조 얻기

class A extends Actor { 

val b = new B 
b.start 

val i = new DefaultHandler() { 
      override def fun(a: String) = { 
       b ! payload 
      } 
     } 
someotherclass.registerHandler(i) 

def act = { 
     loop { 
     react { 
      case reply => //do something 

} 

class B extends Actor { 

def act = { 
     loop { 
     react { 
      case msg => sender ! reply 

      } 
} 

문제는 이제 더 이상 그 결과 배우로 배우 자체 내에서 아니에요 내부 클래스에서 전송하는 동안 B는 배우에 대한 올바른 참조를하지 않는다는 것입니다 B.이 문제를 해결하는 한 가지 방법은 메시지를 통해 A에 대한 참조를 전달하는 것이지만 이것은 나에게 상당히 못 생깁니다. 이 문제를 해결하기 위해 더 우아한 방법은

val ref = self 
val i = new DefaultClass() { 
      override def fun(a: String) = { 
       b ! message(payload, ref) 
      } 
     } 

있습니까?

답변

1

배우 B는 A가 아닌 올바른 참조를받습니다. 그러나 이미 자신의 질문에 답변했습니다.

다른 접근 방법은 다음과 같습니다

  1. 가 배우에서 확장
  2. 옵션 :
  3. 이 메시지 연산자에 암시 배우 참조가 배우의 당신의 친절에 대한 암시 적 변환을 가지고

그런 경우 DefaultHandler는 원래 Actor에 대한 참조를 유지해야합니다.

관련 문제