我的玩具功能定义如下:
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)
}
}
问题是最后一个左案例陈述。如果我省略它,那么所有类型都会检查。但是,只要我添加左案例语句来处理错误条件,它就会因为代码不再进行类型检查而中断。我在这里做错了什么?
答案 0 :(得分:3)
您没有从左侧案例中返回Future
,并且您的InternalServerError
不会自动换行,因此您必须这样做:
case Left(x) => Future.successful(InternalServerError(x))