Scala 中的 firstCompletedOf 需要什么是隐式的

What is Implicit for needed in firstCompletedOf in Scala

问题

这是摘自 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 后,我开始非常喜欢 "explicits"(尽管我真的很喜欢 scala)。

谁能告诉我关于该主题的任何其他重要资源?

一个很棒的资源居然是scala自带的documentation.

在 firstCompletedOf 中,执行上下文负责计算期货。

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

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

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

至于 implicits 上的一般性讨论,它们是一个强大的工具。引用本·帕克的话,"with great power, comes great responsibility"