当前位置:  开发笔记 > 编程语言 > 正文

在定义路由指令时是否可以使用隐式参数?

如何解决《在定义路由指令时是否可以使用隐式参数?》经验,为你挑选了1个好方法。

我有一个指令,定义为

def allowedRoles(roles: UserRole*)(implicit login: Login): Directive0 = ???

但我似乎无法在不必明确传递login参数的情况下使用它

def myRoutes(implicit req: HttpRequest, login: Login) = {
  path("example" / "path") {
    get {
      allowedRoles(Administrator) { // ? fails 
        handleGet
      }
    }
  }
}

如果我尝试编译它失败,类型不匹配:

[error]  found   : akka.http.scaladsl.server.Route
[error]     (which expands to)  akka.http.scaladsl.server.RequestContext => scala.concurrent.Future[akka.http.scaladsl.server.RouteResult]
[error]  required: com.example.Login
[error]         allowedRoles(Administrator) { handleGet } }

如果我将标记线更改为allowedRoles(Administrator)(login)然后它可以工作,但似乎我不应该这样做,我错过了什么?



1> Alexey Roman..:

这是因为通过Scala规则,{ handleGet }被认为是第二个参数列表allowedRoles.要解决这个问题,请明确说明它实际上是以下参数Directive0.apply:

allowedRoles(Administrator).apply { handleGet }

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有