gpt4 book ai didi

scala - 具有替代方法的重载方法值 : when calling Call. 具有请求的绝对 URL

转载 作者:行者123 更新时间:2023-12-02 03:29:49 34 4
gpt4 key购买 nike

这是我的代码

  class AuthAction(callbackUri:String) extends ActionBuilder[UserRequest] with ActionRefiner[Request,UserRequest]{
override def refine[A](request: Request[A]): Future[Either[Result,UserRequest[A]]] = {
val redirectUri = routes.Application.callback(None, None).absoluteURL(request)
getUser(request) match {
case Some(user) => Future.successful(Right(new UserRequest(user,request)))
case _ => Future.successful(Left(oauthLogin(callbackUri,redirectUri)(request)))
}

}
}

当我尝试编译这段代码时,出现以下错误

[error]   (secure: Boolean)(implicit request: play.api.mvc.RequestHeader)String <and>
[error] (x$1: play.mvc.Http.Request)String
[error] cannot be applied to (play.api.mvc.Request[A])
[error] val redirectUri = routes.Application.callback(None, None).absoluteURL(request)

这与隐式参数有关吗?这里发生了什么?

最佳答案

它需要 play.mvc.Http.Request,而您正在尝试传入 play.api.mvc.Request。它们不兼容。

编辑:回答您在评论中提出的问题......嗯,我不确定你说的是哪个参数。这个函数有两种风格:

那个,你似乎想调用 -absoluteURL(request: play.mvc.Http.Request) - 不接受任何隐式参数,它只需要正确类型的request

另一个 - absoluteURL(secure: Boolean)(implicit request: play.api.mvc.RequestHeader) - 确实有一个隐式参数,它也与你拥有的类型不同(RequestHeader,而不是Request)。

如果您将保存此 requestHeader 的变量声明为 implicit,并且它在范围内,您可以调用后一个函数而无需显式指定它:

implicit val requestHeader = createMyRequestHeader()
routes.Application.callback(None, None).absoluteURL(true)

或者您仍然可以像使用常规参数一样显式传递它(在这种情况下,您不需要将其声明为隐式):

routes.Application.callback(None, None).absoluteURL(true)(requestHeader)

关于scala - 具有替代方法的重载方法值 : when calling Call. 具有请求的绝对 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27637377/

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