2017-02-23 39 views
1

這是全碼:IntelliJ IDEA的強調我與implicits Scala代碼,但是代碼工作

package com.example.controller 

import spray.routing.{HttpService, Route} 
import spray.http.StatusCodes 

import scala.util.{Failure, Success} 
import scala.concurrent.Future 
import scala.concurrent.ExecutionContext.Implicits.global 

trait RentController extends HttpService{ 

    var books: List[String] = List("1","2","3","4") 

    def rentBook(intNum: Int): Future[Unit] = Future[Unit] { 
    val book = books.find(p => p.equals(intNum.toString)) 
    if(book.head.equals("4")) throw new UnsupportedOperationException() 
    } 

    def giveBackBook(intNum: Int): String = { 
    val book = books.find(p => p.equals(intNum.toString)) 
    book.head 
    } 

    val rent: Route = 
    pathPrefix("rent") { 
     path("book"/IntNumber) { intNum => 
     get { 
      onComplete(rentBook(intNum)) { 
      case Success(_) => complete(StatusCodes.OK) 
      case Failure(_) => complete(StatusCodes.Accepted) 
      } 
     } 
     } 
    } 

    val giveBack: Route = 
    pathPrefix("giveBack") { 
     path("book"/IntNumber) { intNum => 
     get { 
      onSuccess(Future.successful(giveBackBook(intNum))) { 
      extraction: String => complete(extraction) 
      } 
     } 
     } 
    } 

} 

是什麼奇怪的,他只強調的onSuccess,但的onComplete顯然是正確的他。代碼的作品,但我想知道如果我可能在某個地方犯了一些錯誤。所以請告訴我是否缺少一些導入,或者它只是IntelliJ錯誤。

編輯

我改變了代碼,現在功能rendBook和giveBackBook的arent在邏輯上是正確的,並沒有做太多,但你應該複製很容易

+0

您可以發佈[MCVE]複製粘貼它不適用於任何人。 –

+0

[錯誤報告是歡迎]與在重現出附着的示例項目(https://youtrack.jetbrains.com/issues/SCL)。 – CrazyCoder

+0

@YuvalItzchakov如果你仔細觀察,這是最小的,完整的和可驗證的例子:)兩條路線,一個作品,一個沒有,所有進口:)每一件該代碼是需要驗證我的問題,我覺得:) –

回答

0

這是在的IntelliJ的斯卡拉插件a bug - 過度使用的暗示可能會讓你在那裏。如果你知道磁鐵模式 - 這也是Spray uses,它需要大量的隱式轉換來克服Scala中的一些重載限制。

我有這個問題時,我已經使用了磁鐵模式來實現某些功能,這樣不僅使用噴霧 - 一些代碼被強調,而它的其餘部分沒有,但它的工作呢。