56 votes

Différence entre Itérateur et Flux en Scala?

Il semble que les deux Itérateur et de Flux sont paresseux et vous permettent de garder le retour d'éléments au contenu de votre coeur. Quelle est la différence entre les deux?

48voto

Walter Chang Points 7041

Flux memoises et Itérateur n'est pas. Vous pouvez parcourir le même cours d'eau plusieurs fois et obtenir le même résultat à chaque fois. Itérateur, d'autre part, ne peut être traversé à la fois.

20voto

ron Points 4636

Ils sont à la fois des constructions pour accéder à un élément en cours, avoir un encore inconnu de la liste des éléments restants (les paresseux de la queue).

Iterator il est impératif de construire que vous pouvez parcourir seulement une fois.

Stream fonctionnel de construire. En théorie, vous pouvez traverser à plusieurs reprises (et comme d'autres l'ont mentionné, il ne sera pas recalculer le déjà calculés pièces), mais dans la pratique, car les Ruisseaux sont soit infini ou très grand (c'est pourquoi vous l'utilisez en premier lieu), la tenue de référence pour le jet n'a pas beaucoup de sens (de l'exécution dans la Mémoire assez facile).

En général, il est plus sûr à l'esprit pour éviter de plain Streams. Des Alternatives sont à l'aide de EphemeralStream de Scalaz qui auto-oublie unreferred pièces à l'aide de références faibles, ou à l'aide de Iteratees (voir aussi ici) ou quelque chose de similaire.

12voto

Jonathan Feinberg Points 24791

Ce fil à la Scala liste de diffusion va dans le détail pour répondre à votre question. Pour extrait la partie la plus pertinente, Tony Morris dit:

L'un est pur, l'autre est impératif (Itérateur). Vous remarquerez peut-être que Itérateur.la prochaine est le côté-accomplissement. Imaginez changer sa méthode à de retour d'un tuple contenant un Itérateur au lieu de cela. c'est à dire au lieu de retourner un T (pour Itérateur[T]), elle renvoie un (T, Itérateur[T]).

Que faisons-nous maintenant? Un flot! prochaine._1 est à la tête et à la prochaine._2 est la queue.

Une meilleure question pourrait être: "pourquoi s'embêter avoir des Itérateurs (ou l'impératif constructions)?". Je soupçonne que la réponse a quelque chose à voir avec Java et cibler la JVM, c'est à dire un défaut de prémisse.

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