我有一个具有复杂参数类型的IsAuthenticated
方法(我从play2的zentasks示例中复制了它):
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
以提供所需的不同口味。例如:
def IsAuthenticated(result: => Result) = IsAuthenticated { _ => _ => result }
然后可以按以下方式使用它:
def delete(id:String) = IsAuthenticated {
...
}
关于scala - 如何重构“IsAuthenticated”方法以提供更好的API,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10082977/