【发布时间】:2015-12-22 21:12:21
【问题描述】:
我想了解当你这样做时请求变量是如何进入范围的:
def test(): Action = { request =>
}
能否在范围内引入其他变量? 这在 Scala 中是如何工作的?
在关系问题中,我创建了自己的自定义操作,但我对它到底是什么类型感到困惑?
我做了类似身份验证示例的操作:
class AuthenticatedRequest[A](val username: String, request: Request[A]) extends WrappedRequest[A](request)
object Authenticated extends ActionBuilder[AuthenticatedRequest] {
def invokeBlock[A](request: Request[A], block: (AuthenticatedRequest[A]) => Future[SimpleResult]) = {
request.session.get("username").map { username =>
block(new AuthenticatedRequest(username, request))
} getOrElse {
Future.successful(Forbidden)
}
}
}
参考:https://www.playframework.com/documentation/2.2.x/ScalaActionsComposition
在我的控制器中,我想将“请求”作为参数传递给方法,但我无法弄清楚它的确切类型。当我尝试 AuthenticatedRequest 时,它说我必须传入类型参数。
【问题讨论】:
-
@I.K.我看还行。但它是如何做到的呢?有人可以创建一个简单的类,它的行为类似于一个动作,但为了让我明白这一点而进行了精简?
-
不知道你为什么对
Action感到困惑;它只是一种表示将Request映射到Result的函数的类型。来自源代码:def apply(request: Request[A]): Future[Result]
标签: scala playframework