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 class
是 abstract
),因此您可以:
- 自己复制那个编译器魔法(见上文)
- 部分应用
apply
调用以将其转换为函数,如
jsonFormat2(MyData.apply(_, _))
我有以下定义:
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 class
是 abstract
),因此您可以:
- 自己复制那个编译器魔法(见上文)
- 部分应用
apply
调用以将其转换为函数,如
jsonFormat2(MyData.apply(_, _))