2015-01-05 1 views
3

나는 다음과 같은 코드 조각 한 : 여기Implicits.global이있는 임베디드 ExecutionContext를 컴파일러에서 찾을 수없는 이유는 무엇입니까?

import java.util.concurrent.Executor 
import scala.concurrent.Future 

trait Storage { 
    def store(location: String, content: Array[Byte])(implicit exec: Executor): Future[String] 
} 
object LocalStorage extends Storage { 

override def store(location: String, content: Array[Byte])(implicit exec: Executor): Future[String] = 
    Future { 
    ... do some stuff ... 
    "Hello" 
    } 
} 

그리고는 테스트를위한 코드를 제공 :

object LocalStorageTest extends App{ 
    import scala.concurrent.ExecutionContext.Implicits.global 

    val testImage = AsyncWebClient get "some url" 
    val result = testImage.flatMap{content => LocalStorage.store("logo.png",content)} 
    val status =Await.result(result, 30 seconds) 
    println(status) 
    AsyncWebClient.shutDown 
} 

나는, 나는 다음과 같은 오류가 무엇입니까 코드를 실행하려고 할 때마다 :

Cannot find an implicit ExecutionContext.

왜? scala.concurrent.ExecutionContext.Implicits.global이 이미 범위 안에 있습니까? 이 가져 오기가 LocalStorage 개체에 직접 추가되면 작동합니다 (!)

하지만 컨텍스트를 변경할 가능성이 있습니다. 매번 전역에서이 코드를 실행하고 싶지 않기 때문에. 이것은 akka 응용 프로그램의 일부이며 "운영"런타임의 경우 일부 디스패처에서 실행되기로되어 있습니다. 테스트를 위해 전역 실행 컨텍스트에서 실행하고 싶습니다.

여기에 몇 가지 중요한 개념이 누락되었거나 그러한 유연성을 잃어 버리는 디자인이 잘못 되었습니까? 문제는 어디에 있습니까?!

답변

4

ExecutionContextExecutor과 같지 않습니다. 메서드가 implicit exec: ExecutionContext (scala.concurrent.ExecutionContext)을 받아들이도록 설정하면 예상대로 작동합니다.

+0

감사합니다. 실명합니다! 그게 전부 야. – jaksky

관련 문제