2013-08-08 2 views
0

Horstman (291-292 페이지) 책의 샘플 코드에 따라 사례 클래스 을 정의하고 간단한 Scala 배우 시스템에서 메시지로 사용하십시오.스칼라의 메시지로 사례 클래스 사용

문제는 클래스가 수신 패턴 일치에서 인식되지 않고 컨트롤이 case _ => 문으로 넘어가는 것입니다.

코드는 다음과 같습니다. 모든 것은 케이스가 아닌 클래스 메시지와 함께 작동합니다.

SENDER : 배우 Rcoord에서 행위 방법은 다음과 같습니다

def act() { 
    alive(9000) 
    register('rcoord, self) 
    proc_reg.start     // start the process register actor 

    loop { 
    try { 
     receive { 
     case 'process => 
      process_counter += 1 
      process_number = process_counter 
      spawn_process(process_number, sprocs) 
      case class CreateTS(xxx: Int) 
      proc_reg ! CreateTS(process_number) 

     case 'stats => 
      Console.println("received msg from client to view statistics") 
      //sender ! 'ok 

     case 'stop => 
      Console.println("received msg that client is terminating") 
      //sender ! 'bye 
     } // end receive 
    } 
    catch 
    { 

RECEIVER : 배우에서 proc_reg행위 방법은 다음과 같습니다

def act() { 
    Console.println("process register started") 

    case class CreateTS(process_number: Int) 
    case class UpdateTS(process_number: Int) 

    loop { 
    receive { 
     case CreateTS(process_number) => 
     Console.println("create TS msg received from process "+process_number) 
     register_proc(process_number) 

     case UpdateTS(process_number) => 
     Console.println("update TS msg received for process "+process_number) 
     update_proc(process_number) 

     case _ => 
     Console.println("sender is: "+sender.toString) 
     //Console.println("full msg is: "+Msg.toString) 
    } // end receive 
    } // end loop 
}  // end act() 

답변

5

당신은이 같은 이름을 가진 2 개의 다른 클래스들 CreateTS.

송신자에 정의 된 CreateTS을 보내고 수신자에 같은 이름의 다른 유형의 메시지를 수신하려고합니다.

두 메소드의 범위에 있도록 메소드 본문에서 사례 클래스의 선언을 이동해야합니다.

스칼라 액터는 더 이상 사용되지 않으므로 akka 액터를 사용해야합니다.

+0

고마워요. 네가 제안한 것을 시도 할 것이다. Akka에 대해 알고 있지만 학습 경험으로는 먼저 Scala 배우를 통해 작업하고 있습니다. 다시 한번 감사드립니다. –

관련 문제