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"
问题
这是摘自 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"