我有一个指令,定义为
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)
然后它可以工作,但似乎我不应该这样做,我错过了什么?
这是因为通过Scala规则,{ handleGet }
被认为是第二个参数列表allowedRoles
.要解决这个问题,请明确说明它实际上是以下参数Directive0.apply
:
allowedRoles(Administrator).apply { handleGet }