我在 Scala/Akka 中有一个 Actor 系统,可以发送和接收除简单原语之外的消息。如果我有类似的接收案例:
(name: String, details: Map[String, List[Int])
编译器给出类型擦除的警告。在我看来,解决此问题的最简单方法是为系统中的每条可能消息定义案例类。
有没有更好/更正确/更优雅的方式来做到这一点?
我在 Scala/Akka 中有一个 Actor 系统,可以发送和接收除简单原语之外的消息。如果我有类似的接收案例:
(name: String, details: Map[String, List[Int])
编译器给出类型擦除的警告。在我看来,解决此问题的最简单方法是为系统中的每条可能消息定义案例类。
有没有更好/更正确/更优雅的方式来做到这一点?
是的,选择case class
es 和case object
s 并将它们放入 actor 的伴生对象中。
object Printer {
case class Print(name: String, details: Map[String, List[Int])
}
class Printer extends Actor {
import Printer._
def receive = {
case Print(name, data) => println(data)
case _ => println("I'm sry, what?")
}
}