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