以下Horstman书中的示例代码(第291-292页)定义和使用案例类 作为简单的Scala actor系统中的消息。
问题是在接收模式匹配中没有识别类,并且控制正在落入 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()
答案 0 :(得分:5)
您有2个不同的类,名称相同CreateTS
。
您正在发送方中定义CreateTS
,并尝试在接收方中接收其他类型的同名消息。
您应该从方法体移动案例类的声明,因此它将在两种方法的范围内。
请注意,不推荐使用scala actor,您应该使用akka actors。