38 votes

Dans Scala Akka futures, quelle est la différence entre map et flatMap?

normal Scala carte et flatMap sont différentes en ce flatMap retournera un objet iterable les données aplaties dans une liste. Cependant, dans la Akka documentation, carte et flatMap semblent faire quelque chose de différent?

http://akka.io/docs/akka/1.1/scala/futures.html

Il dit: "Normalement, cela fonctionne très bien car elle signifie qu'il y a très peu de surcharge à l'exécution rapide de la fonction. Si il ya une possibilité de la fonction prenant un montant non négligeable de temps pour le processus, il pourrait être préférable de le faire simultanément, et pour cela nous utilisons flatMap:"

val f1 = Future {
  "Hello" + "World"
}

val f2 = f1 flatMap {x =>
  Future(x.length)
}

val result = f2.get()

Quelqu'un peut-il expliquer ce qu'est la différence entre la carte et flatMap ici dans Akka terme?

60voto

paradigmatic Points 20871

En "normal" Scala (comme vous dites), d'une carte et flatMap n'ont rien à voir avec les Listes (Option à cocher par exemple).

Alexey vous a donné la bonne réponse. Maintenant, si vous voulez savoir pourquoi nous avons besoin des deux, il permet de nice, for de syntaxe lors de la rédaction de contrats à terme. Étant donné quelque chose comme:

val future3 = for( x <- future1;
                   y <- future2 ) yield ( x + y )

Le compilateur réécrit comme:

val future3 = future1.flatMap( x => future2.map( y => x+y ) )

Si vous suivez la signature de la méthode, vous devriez voir que l'expression renvoie à quelque chose de type Future[A].

Supposons maintenant seulement la carte a été utilisée, le compilateur pourrait faire quelque chose comme:

val future3 = future1.map( x => future2.map( y => x+y ) )

Cependant, le résultat devrait ont été de type Future[Future[A]]. C'est pourquoi vous avez besoin pour l'aplatir.

Pour en apprendre davantage sur le concept derrière, ici, c'est la meilleure introduction que j'ai lu:

http://www.codecommit.com/blog/ruby/monads-are-not-metaphors

35voto

Alexey Romanov Points 39124

Quelqu'un peut-il s'il vous plaît expliquer quelle est la différence entre la carte et flatMap ici dans Akka futures?

Le type, fondamentalement:

 flatMap[A](f: T => Future[A]): Future[A] 

map[A](f: T => A): Future[A] 
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X