Scala Play Controller中的模式匹配

时间:2015-12-17 23:59:26

标签: scala playframework

我的玩具功能定义如下:

case class Foo (a : Int, b : String)

def get(): Either[String, Future[Option[Foo]]] = {
  Right(Future.successful(Some(Foo(1, "ABS"))))
}

在Scala Play控制器中,我尝试对此函数调用的结果进行模式匹配:

  def hello() : Action[AnyContent] = Action.async { implicit request =>
    get() match {
      case Right(x) => x.map{
        case foo => Ok(Json.toJson(foo))
        case None => NoContent
      }
      case Left(x) => InternalServerError(x)
    }
  }

问题是最后一个左案例陈述。如果我省略它,那么所有类型都会检查。但是,只要我添加左案例语句来处理错误条件,它就会因为代码不再进行类型检查而中断。我在这里做错了什么?

1 个答案:

答案 0 :(得分:3)

您没有从左侧案例中返回Future,并且您的InternalServerError不会自动换行,因此您必须这样做:

  case Left(x) => Future.successful(InternalServerError(x))