4

@TravisBrown昨天帮助我使用了一个返回 Writes[T] 的隐式函数,我工作得很好,但是今天我尝试将它调整为另一个示例,并在最后一行出现错误(“应用程序不接受参数”) . 我究竟做错了什么?

请忽略这些toString方法,它们只是用于调试。

import play.api.libs.json._
import play.api.libs.functional.syntax._

sealed trait PressureUnit
case object HectoPascalsUnit extends PressureUnit  { override def toString(): String = "(HectoPascalsUnit)" }
case object InchesMercuryUnit extends PressureUnit { override def toString(): String = "(InchesMercuryUnit)" }

case class Pressure(value: Float, unit: PressureUnit)

class SeaLevelPressure(override val value: Float, override val unit: PressureUnit) extends Pressure(value, unit) {
  override def toString(): String = "(SeaLevelPressure value:"+value+" unit:"+unit+")"
}
class StationPressure(override val value: Float, override val unit: PressureUnit) extends Pressure(value, unit) {
  override def toString(): String = "(StationPressure value:"+value+" unit:"+unit+")"
}

object Pressure {
  implicit val pressureWrites: Writes[Pressure] = (
    (__ \ 'value).write[Int] and
      (__ \ 'unit).write[String].contramap[PressureUnit] {
        case HectoPascalsUnit => "hPa"
        case InchesMercuryUnit => "INS"
      }
    )(unlift(Pressure.unapply))  // Error: Application does not take parameters
}
4

1 回答 1

4

我想到了。我需要改变这个:

(__ \ 'value.write[Int] and

对此:

(__ \ 'value.write[Float] and

抱歉打扰你!

于 2015-02-27T17:07:13.763 回答