Scala/Akka 您如何引用收到的消息?

Scala/Akka How do you reference the message being received?

我有一个必须在 Scala 中实现的 Java 程序,但我对 Scala 非常陌生。在阅读了一些 SO 问题和答案以及阅读了一些 Google 案例 classes 的检索资源之后,我仍然无法掌握如何获取对我收到的消息的引用?示例代码如下:

case class SpecialMessage(key: Int) {
  val id: Int = Main.idNum.getAndIncrement().intValue()   
  def getId(): Int = {
    return id
  }
}

然后在另一个 class 的接收中,我试图通过以下方式引用该号码:

def receive() = {
  case SpecialMessage(key) {
    val empID = ?? getId() // Get the id stored in the Special Message

    // Do stuff with empID
  }
}

我无法弄清楚在 empID = 的右侧放置什么才能获得该 ID。这真的很简单,还是通常不会做的事情?

有两种方法可以做你想做的,选择最适合的一种

case msg: SpecialMessage => {
  val empID = msg.getId() // Get the id stored in the Special Message
  // Do stuff with empID
}
case msg @ SpecialMessage(key) => {
  val empID = msg.getId() // Get the id stored in the Special Message
  // Do stuff with empID
}

Pim 的回答很好。 但是也许你可以修改 SpecialMessage 的结构,比如

  case class SpecialMessage(key: Int,val id: Int = Main.idNum.getAndIncrement().intValue())

所以你可以直接从模式匹配中获取id。

def receive() = {
  case SpecialMessage(key, empID) {
     // Do stuff with empID
  }
}