3
我有一个具有复杂的参数类型IsAuthenticated
方法(我从play2的zentasks例如复制它):如何重构IsAuthenticated`的`的方法,以提供更好的API
def IsAuthenticated(f: => String => Request[AnyContent] => Result): Action[(Action[AnyContent], AnyContent)] =
Security.Authenticated(username, onUnauthorized) { userId =>
Action { implicit request =>
val email = request.session("user.email")
f(email)(request)
}
}
为了使用它,我的动作是:
def delete(id:String) = IsAuthenticated { email => request =>
...
}
你可以看到我必须声明email
事件,如果我不需要使用它。我可以用_
代替:
def delete(id:String) = IsAuthenticated { _ => _ =>
...
}
但_ => _ =>
仍然是无聊。
如何重构该方法使其用法更简单?例如如果我不需要email
和request
,我可以:
def delete(id:String) = IsAuthenticated {
...
}
如果我只需要request
,我可以:
def delete(id:String) = IsAuthenticated { request =>
...
}
如果我需要email
,然后我宣布他们都:
def delete(id:String) = IsAuthenticated { email => request =>
...
}
对不起,编译错误:'双定义:方法IsAuthenticated:(F:=> play.api.mvc.Result)玩.api.mvc.Action [(play.api.mvc.Action [play.api.mvc.AnyContent],play.api.mvc.AnyContent)]和方法IsAuthenticated:(f:=> models.SessionUser => play。 api.mvc.Request [play.api.mvc.AnyContent] => play.api.mvc.Result)play.api.mvc.Action [(play.api.mvc.Action [play.api.mvc.AnyContent], (f:Function0)play.api.mvc.Action' – Freewind 2012-04-10 14:19:42
将第一行的'IsAuthenticated'更改为'def IsAuthenticated(f:String => Request [AnyContent] => Result)'(使用一个按值参数)。 – 2012-04-10 15:55:48