2015-12-04 39 views
3

我有一個指令,這樣定義定義路由指令時可以使用隱式參數嗎?

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)那麼它的工作原理,但似乎我不應該這樣做,我錯過了什麼?

+0

您是否嘗試將隱式定義登錄(在myRoutes定義中)? – Nyavro

回答

4

這是因爲由斯卡拉規則,{ handleGet }被認爲是allowedRoles第二個參數列表。要解決這個問題,請清楚它實際上是Directive0.apply的參數:

allowedRoles(Administrator).apply { handleGet } 
相關問題