QUESTIONQuelle est Implicite pour nécessaire dans firstCompletedOf à Scala
C'est un extrait de 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
}
Ma question est, pourquoi avons-nous besoin d'une ExecutionContext
implicite ici? Que fait-il dans ce cadre?
CONTEXTE
Commutation de Java vers Python j'été bouleversé par le fait que ce qui suit est pas un programme Python correct:
print("some string" + 42)
Vous devez ajouter la conversion explicite, cette volonté travail:
print("some string " + str(42))
Ensuite, j'ai commencé à programmer en Scala, et en quelque sorte les implicits commencé à être mon nig htmare:
J'ai lu pas mal d'articles (this étant le meilleur) sur implicits et je ne suis toujours pas convaincu, pourquoi avons-nous besoin d'implicits en scala !? À mon avis, à long terme, les implicites rendent votre code difficile à comprendre. Depuis le passage à scala, j'ai commencé à vraiment aimer les "explicits" (même si j'aime vraiment les scala).
Quelqu'un pourrait-il me diriger vers d'autres ressources sur le sujet?
Je voudrais que la réponse soit plus spécifique, c'est-à-dire, ce que ExecutionContext fournit à cette portée - un équivalent de la 'str (_)' dans mon Exemple Python – GA1
Le contexte que vous devez utiliser dépend de votre problème. Vous pouvez toujours revenir à scala.concurrent.ExecutionContext.global, qui est soutenu par un ForkJoinPool, mais si vous l'utilisez dans un projet plus grand avec beaucoup de computations asynchrones, vous devriez utiliser votre propre contexte d'exécution, qui pour le test et le développement fins pourrait être le contexte standard. –