【问题标题】:Scala: Syntax of passing an execution context to Future's map functionScala:将执行上下文传递给 Future 的 map 函数的语法
【发布时间】:2013-12-04 16:36:59
【问题描述】:

这个问题的前一个版本没有说到点子上,所以我试着把它归结为:

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)

【问题讨论】:

    标签: scala future executioncontext


    【解决方案1】:

    试试

    f.map(myFunction)(executionContext)
    

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

    【讨论】:

    • 这确实有效!我没有尝试使用 dot 和无空格 ;-/ 真可惜,我真的开始喜欢空格变体了。
    【解决方案2】:

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

    (f map myFunction)(executionContext)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-18
      • 2015-07-18
      相关资源
      最近更新 更多