scala - 在 Scala 中的 firstCompletedOf 中需要什么是隐式的

标签 scala future implicit

问题

这是 scala.concurrent.Future 的摘录

  def firstCompletedOf[T](futures: TraversableOnce[Future[T]])(implicit executor: ExecutionContext): Future[T] = {
    val p = Promise[T]()
    val completeFirst: Try[T] => Unit = p tryComplete _
    futures foreach { _ onComplete completeFirst }
    p.future
  }

我的问题是,为什么我们需要一个隐含的 ExecutionContext在这里?它在这个范围内做什么?

背景

从 Java 切换到 Python 我对以下不是正确的 Python 程序感到不安:
print("some string" + 42)

您必须添加显式转换,因此这将起作用:
print("some string " + str(42))

然后,我开始在 Scala 中编程,不知何故隐式开始成为我的噩梦:

我已经阅读了很多关于隐式的文章(this 最好的一篇),但我仍然不相信,为什么我们需要在 Scala 中使用隐式!?

在我看来,从长远来看,隐式会使您的代码难以理解。

自从切换到 Scala 后,我开始真正喜欢“显式”(尽管我确实很喜欢 Scala)。

任何人都可以向我指出有关该主题的任何其他重要资源吗?

最佳答案

在该特定上下文中,onComplete回调需要一个执行上下文。

def onComplete[U](f: (Try[T]) ⇒ U)(implicit executor: ExecutionContext): Unit

直觉是,一旦 Future 在其自己的执行上下文中完成,我们需要计算资源来执行回调闭包中的逻辑。

至于关于implicits的一般性讨论,它们是一个强大的工具。引用本帕克的话,“能力越大,责任越大”

关于scala - 在 Scala 中的 firstCompletedOf 中需要什么是隐式的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41122312/

相关文章:

Java Future 总是返回 null

scala - 在 Scala 的构造函数中扩展具有隐式参数的类的惯用方法是什么?

scala - 无法让 Spark 聚合器正常工作

java - 从 Java 代码访问 Scala 类型类?

java - 如何使用几个线程完成大量作业,并为每个线程提供相同的超时完成时间?

java - 如何等待 future 列表得到满意的结果?

scala - 如何将递归函数转换为尾递归版本?

scala - inferSchema=true 不适用于读取 csv 文件 n Spark Structured Streaming

scala - Scala 3 中的类型模式匹配和推理错误

scala - 无法在 ScalaTest 中导入 Spark 隐式