3

我有一个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 { _ => _ =>
   ...
}

但是_ => _ =>还是很无聊。

如何重构方法以使其使用更简单?例如,如果我不需要emailand request,我可以:

def delete(id:String) = IsAuthenticated {
   ...
}

如果我只需要request,我可以:

def delete(id:String) = IsAuthenticated { request =>
   ...
}

如果我需要email,那么我将它们全部声明:

def delete(id:String) = IsAuthenticated { email => request =>
   ...
}
4

1 回答 1

4

您可以重载IsAuthenticated以提供所需的不同风味。例如:

def IsAuthenticated(result: => Result) = IsAuthenticated { _ => _ => result }

然后,您可以按如下方式使用它:

def delete(id:String) = IsAuthenticated {
   ...
}
于 2012-04-10T09:43:49.157 回答