【问题标题】:Use case classes as messages in Scala用例类作为 Scala 中的消息
【发布时间】:2013-08-08 12:37:42
【问题描述】:

我遵循 Horstman 书中(第 291-292 页)中的示例代码来定义和使用 案例类 作为简单 Scala 演员系统中的消息。

问题是在接收模式匹配中没有识别案例类,控制权落入case _ =>语句。

代码如下。一切都适用于非案例类消息。

SENDER:在actor Rcoord 中,act 方法是:

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:在actor proc_reg 中,act 方法是:

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()

【问题讨论】:

    标签: scala abstract-class case message-passing


    【解决方案1】:

    你有 2 个不同的类同名CreateTS

    您正在发送在 sender 中定义的 CreateTS 并尝试在接收者中接收具有相同名称的其他类型的消息。

    您应该将案例类的声明从方法主体中移出,以便它在两种方法的范围内。

    请注意,不推荐使用 scala 演员,您应该使用 akka 演员。

    【讨论】:

    • 非常感谢。会尝试你的建议。我知道 Akka,但作为一种学习经验,我首先通过 Scala 演员工作。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 2015-06-30
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多