Scala:访问在另一个文件中定义的案例 class

Scala: Accessing case class defined in another file

我有以下定义:

case class MyData(id: String, name: String)

object MyData {
  ....
}

这些在同一个 Scala 文件中。

现在如何访问另一个 Scala 文件中的 case class?当我尝试在另一个 Scala 文件中执行以下操作时:

implicit val dataFormat = jsonFormat2(MyData)

...我收到错误:类型不匹配,发现 MyData.type

为了详细说明@jwvh 的回答,如果您没有为 case class 定义伴生对象,编译器生成的伴生对象(case class 魔法的一部分)将表达存在apply 方法的类型,也就是说,对于 MyData

object MyData extends Function2[String, String, MyData]

这允许在需要函数的上下文中使用裸伴随对象,例如到 Spray 的 jsonFormat2.

如果您自己为 case class 定义伴生对象,case class 魔法的那部分将被抑制(尽管编译器仍会生成 apply 方法,除非 case classabstract),因此您可以:

  • 自己复制那个编译器魔法(见上文)
  • 部分应用 apply 调用以将其转换为函数,如
jsonFormat2(MyData.apply(_, _))