Cam*_*lis 10 scala playframework playframework-2.0
我知道一个方法可以有这样的代码:
def m(p1:Int => Int) ...
Run Code Online (Sandbox Code Playgroud)
这意味着此方法采用返回Int的函数p1
但是在浏览Play的同时!框架代码我找到了一个具有难以理解的方法的特征:
trait Secured {
def username(request: RequestHeader) = request.session.get(Security.username)
def onUnauthorized(request: RequestHeader) = Results.Redirect(routes.Auth.login)
def withAuth(f: => String => Request[AnyContent] => Result) = {
Security.Authenticated(username, onUnauthorized) { user =>
Action(request => f(user)(request))
}
}
/**
* This method shows how you could wrap the withAuth method to also fetch your user
* You will need to implement UserDAO.findOneByUsername
*/
def withUser(f: User => Request[AnyContent] => Result) = withAuth { username => implicit request =>
UserDAO.findOneByUsername(username).map { user =>
f(user)(request)
}.getOrElse(onUnauthorized(request))
}
}
Run Code Online (Sandbox Code Playgroud)
什么f: User => Request[AnyContent] => Result意思?乍一看,它看起来像一个返回rRequest类型函数的方法; r然后返回一个Result.
这是正确的假设吗?
sep*_*p2k 16
f:User => Request [AnyContent] =>结果是什么意思?乍一看,它看起来像一个返回Request类型函数r的方法; 然后r返回一个Result.
f返回一个类型的函数Request[AnyContent] => Result,即一个带a Request[AnyContent]和返回a 的函数Result.
换句话说,f是一个curried函数.你可以称之为f(user)(request)取回一个Result.