gpt4 book ai didi

scala - 如何重构 `IsAuthenticated`的方法来提供更好的api

转载 作者:行者123 更新时间:2023-12-05 01:27:39 25 4
gpt4 key购买 nike

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

但是 _ => _ => 仍然很无聊。

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

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

如果我只需要请求,我可以:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com