Scala:将执行上下文传递给Future的map函数的语法

时间:2013-12-04 16:37:00

标签: scala future executioncontext

这个问题的先前版本没有达到目的,所以我试着将其归结为:

Future的 map 函数采用ExecutionContext,如下所示(取自API 2.10.3

def map[S](f: (T) ⇒ S)(implicit executor: ExecutionContext): Future[S] 

我想传递自己的ExecutionContext,但我没有成功。好像我没有正确的语法。

如何将ExecutionContext传递给Future的地图函数?

我得到的是:

val executorService  = Executors.newFixedThreadPool(9)
val executionContext = ExecutionContext.fromExecutorService(executorService)

def myFunction(mt : MyType): Unit = println("my function")
def getSomeFuture()(executor: ExecutionContext): Future[MyType] = {..}

// function is served by my execution context. A Future is returned.
val f = getSomeFuture()(executionContext)

// compiles if I provide the standard global execution context - sth. I do NOT want
f map (myFunction)

// does not compile
f map (myFunction)(executionContext)

// does not compile
f map (item => println("sth."))(executionContext)

2 个答案:

答案 0 :(得分:4)

尝试

f.map(myFunction)(executionContext)

一般来说,我发现使用空格而不是点的行为是不直观的,所以除非我复制粘贴一个例子,否则我会尽量避免这种情况。

答案 1 :(得分:2)

仅供参考,如果你想使用方法调用的空间语法,你需要将表达式的整个第一部分包装在parens中:

(f map myFunction)(executionContext)

否则编译器会认为您尝试将executionContext传递给myFunction而不是f map myFunction返回的函数。