问题
这是 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/