【发布时间】:2014-06-17 21:29:17
【问题描述】:
我正在使用案例类在 scala 中创建一些用于喷雾的 json 消息。例如:
case class Foo(name: String, attrs: List[String])
implicit val fooFormat = jsonFormat2(Foo)
object Foo {
case class Invalid(error: String)
}
case class Bar(name: String, kv: Map[String, String])
implicit val barFormat = jsonFormat2(Bar)
在上面的 sn-p 中,barFormat 编译,但 fooFormat 没有:
type mismatch; found : Foo.type required: (?, ?) => ?
Note: implicit value barFormat is not applicable here because it comes
after the application point and it lacks an explicit result type
我不想用barFormat代替fooFormat,而且我明白一个case类会自动生成一个伴生对象,但是我不明白为什么这里会出现编译器错误,以及错误信息我很难破译。有谁知道这里的问题是什么以及如何解决它,最好不要删除我的 Foo 伴随对象?
【问题讨论】:
-
至少给我们
jsonFormat2的类型。 -
@downvoter,请解释你的反对意见。
-
@wingedsubmariner,
jsonFormat2的类型相当神秘:def jsonFormat2[P1, P2, T T)(implicit evidence$4: spray.json.DefaultJsonProtocol.JF[P1],implicit evidence$5: spray.json.DefaultJsonProtocol.JF[P2],implicit evidence$6: ClassManifest[T]): spray.json.RootJsonFormat[T] -
对不起,我没认出那是喷雾的一部分,我还以为是你写的方法。实际上,它的类型是
def jsonFormat2[A :JF, B :JF, T <: Product :ClassManifest](construct: (A, B) => T): RootJsonFormat[T]- 您可能犯了复制/粘贴错误并删除了construct。