2016-11-16 62 views
0

我有一個定義,看起來像這樣:斯卡拉函數返回對象類型

sealed trait ServiceResponse 
    case object OK extends ServiceResponse 
    case object SHIT extends ServiceResponse 

    private def remoteService(waitTime: FiniteDuration): ServiceResponse = { 
    val awaitable: Future[Ok.type] = Future.successful { 
     Thread.sleep(waitTime.toMillis) 
     OK 
    } 
    Await.ready(awaitable, waitTime) 
    } 

的remoteService功能抱怨說,它期待一個類型。那麼爲什麼這是一個問題呢?爲什麼我不能簡單地返回一個Object類型?

+1

您所定義的返回類型'ServiceResponse'的方法,但該方法體返回'未來[OK.type]' - 爲什麼會這樣?也許你的意思是'Await.result(awaitable,waitTime)'作爲最後一行(可以編譯) –

+1

任何你沒有返回'Future [ServiceReponse]'的原因? –

回答

0

這是因爲您需要使用Await.result而不是Await.ready。這工作:

import scala.concurrent._ 
import scala.concurrent.duration._ 

sealed trait ServiceResponse { 

    case object OK extends ServiceResponse 
    case object SHIT extends ServiceResponse 

    private def remoteService(waitTime: FiniteDuration): ServiceResponse = { 
    val awaitable: Future[OK.type] = Future.successful { 
     Thread.sleep(waitTime.toMillis) 
     OK 
    } 
    Await.result(awaitable, waitTime) 
    } 

} 

而且你有一個錯字:未來[Ok.Type]應該是未來[OK.type]