7

次のように定義されたディレクティブがあります

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)と機能しますが、これを行う必要はないようです。何が欠けていますか?

4

1 に答える 1

11

これは、Scala の規則により、{ handleGet }が の 2 番目のパラメーター リストと見なされるために発生しますallowedRoles。これを修正するには、実際には のパラメータであることを明確にしますDirective0.apply:

allowedRoles(Administrator).apply { handleGet }
于 2015-12-04T19:46:06.707 に答える