1

これらのタイプのコンパイルエラーに対処した経験のある人はいますか?

case class BasicAuthRequest[A](account: Account, request: Request[A]) extends WrappedRequest(request) {
    def asOpt[T](implicit fjs: Reads[T]): Option[T] = {
        catching(classOf[RuntimeException]).opt(fjs.reads(JsNull)).filter {
        case JsUndefined(_) => false
        case _ => true
    } }
}

このplayframeworkメソッドをコンパイルしようとすると、scalaコンパイラからこの応答が返されます

[error]  found   : play.api.libs.json.JsUndefined
[error]  required: play.api.libs.json.JsResult[?T1] where type ?T1 <: T (this is a GADT skolem)
[error]         case JsUndefined(_) => false
[error]              ^
[error] one error found
[error] (compile:compile) Compilation failed
[error] Total time: 23 s, completed Nov 27, 2012 3:01:20 AM
4

1 に答える 1

0

fjs.reads(JsNull)はJsResult [T]を返し、これはoptによってOptionにラップされます。

したがって、このコードにはいくつかの問題があります。

  • 戻り値のタイプはOption[JsResult[T]]である必要があります
  • JsUndefinedはJsResultのサブクラスではないため、一致して使用することはできません
  • コンパイラのエラーメッセージは確かに不可解ですが、scalaトラッカーに問題を送信していただけませんか?

これがあなたが実装しようとしていたと思うコードです

  case class Account()

  case class BasicAuthRequest[A](account: Account, request: Request[A]) extends WrappedRequest(request) {
    def asOpt[T](implicit fjs: Reads[T]): Option[T] =
      scala.util.control.Exception.catching(classOf[RuntimeException]).opt(fjs.reads(JsNull)).flatMap(_.asOpt)
  }
于 2012-12-08T17:26:25.020 に答える