Если кажется, что вы не понимаете, как работают понимания в Scala. Учтите следующее:
scala> val x: Option[String] = Some("X")
x: Option[String] = Some(X)
scala> val y: Option[String] = None
y: Option[String] = None
scala> for(xx <- x; yy <- y) yield yy
res0: Option[String] = None
scala> for(yy <- y; xx <- x) yield xx
res1: Option[String] = None
Обратите внимание, что, хотя xx
имеет значение, результат равен None
. Учитывая, что req.param
дает вам Box[String]
(что похоже на Option[String]
), вы можете просто сделать что-то вроде этого (если вы хотите получить ответ, какие бы параметры не были переданы):
JsonResponse(json(
ResponseLimitAfterBefore(
limit.map(_.toInt).openOr(0),
after.openOr("after default"),
before.openOr("another default")
)))
Или, если вы просто хотите предоставить общий ответ по умолчанию, а не параметризованный ответ по умолчанию:
(for {
after <- req.param("after")
before <- req.param("before")
limit <- req.param("limit")
} yield JsonResponse(json(ResponseLimitAfterBefore(
limit.toInt, after, before)))
) openOr BadRequestResponse()
Я бы предложил больше поиграть с обоими подтипами LiftResponse, а также получить четкое представление о том, что на самом деле делают понимания.
Надеюсь, это поможет.