我开始玩Scala,在播放框架页面做一些例子时,我发现了一些我无法解决的问题 . 我是斯卡拉的新人,所以我请原谅 .
为什么这个编译没有错误:
case class Location(lat: Double, long: Double)
implicit val locationReads: Reads[Location] = (
(JsPath \ "lat").read[Double] and
(JsPath \ "long").read[Double]
)(Location.apply _)
但是这个不会编译:
case class Location(lat: Double)
implicit val locationReads: Reads[Location] = (
(JsPath \ "lat").read[Double]
)(Location.apply _)
并显示错误:
重载方法值读取与替代:[error](t:Double)play.api.libs.json.Reads [Double] [error](隐式r:play.api.libs.json.Reads [Double])播放 . api.libs.json.Reads [Double] [error]无法应用于(Double => biz.JsonProtocol.Location)[error](JsPath \“lat”) . read [Double]
2 回答
事实证明,在播放版本<= 2.1(已将其标记为solved)中使用JSON组合器与单字段案例类时存在一些限制 . 有关可能的解决方案,请参阅this问题 .
看起来你不能拥有只有纬度的biz.JsonProtocol.Location ...这就是为什么你的示例与lat和long工作但只是lat将无法编译