【问题标题】:What is the best way of avoiding type erasure in Scala/Akka when sending and receiving messages?在发送和接收消息时,避免在 Scala/Akka 中类型擦除的最佳方法是什么?
【发布时间】:2013-06-16 01:43:28
【问题描述】:

我在 Scala/Akka 中有一个 Actor 系统,可以发送和接收除简单原语之外的消息。如果我收到类似的情况:

(name: String, details: Map[String, List[Int])

编译器给出类型擦除的警告。在我看来,解决此问题的最简单方法是为系统中的每条可能消息定义案例类。

有没有更好/更正确/更优雅的方法?

【问题讨论】:

  • 通常最好为您的 Akka inter-actor 消息定义不同的具体类型(通常是 case classes),是的。
  • 有道理。我是 Scala 和 Akka 的新手,所以我很好奇是否有更好的方法。

标签: scala types akka actor type-erasure


【解决方案1】:

是的,选择case classes 和case objects 并将它们放入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?")
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 2011-01-12
    • 1970-01-01
    相关资源
    最近更新 更多