Dans le cadre des collections Scala 2.8, quelle est la différence entre view
et toStream
?Quelle est la différence entre une vue et un flux?
Répondre
Dans une vue, les éléments sont recalculés chaque fois qu'ils sont accédés. Dans un flux, les éléments sont conservés au fur et à mesure qu'ils sont évalués.
Par exemple:
val doubled = List(1,2,3,4,5,6,7,8,9,10).view.map(_*2)
println(doubled.mkString(" "))
println(doubled.mkString(" "))
réévaluera la carte pour chaque élément deux fois. Une fois pour la première impression, et encore pour la seconde. En revanche
val doubled = List(1,2,3,4,5,6,7,8,9,10).toStream.map(_*2)
println(doubled.mkString(" "))
println(doubled.mkString(" "))
doublera seulement les éléments une fois. Une vue est comme une recette pour créer une collection. Lorsque vous demandez des éléments d'une vue, elle exécute la recette à chaque fois. Un flux est comme un gars avec un tas de cartes effaçables à sec. Le gars sait comment calculer les éléments suivants de la collection. Vous pouvez lui demander l'élément suivant de la collection et vous donner une carte avec l'élément écrit dessus et une ficelle attachée de la carte à son doigt (pour l'aider à se souvenir). Aussi, avant qu'il ne vous donne une carte, il détache la première corde de son doigt et l'attache à la nouvelle carte.
Si vous gardez la première carte (c.-à-d. Gardez une référence à la tête du flux), vous risquez de manquer de cartes (mémoire) lorsque vous demandez l'élément suivant, mais si vous n'avez pas besoin de revenir aux premiers éléments, vous pouvez couper la chaîne et remettre les cartes inutiles au gars et il peut les réutiliser (ils sont effaçables à sec après tout). C'est ainsi qu'un flux peut représenter une séquence infinie sans manquer de mémoire.
Geoff « s answer couvre presque tout, mais je veux ajouter qu'un Stream
est une séquence List
-comme, alors que toutes sortes de collections (cartes, jeux, seqs indexés) ont des vues.
J'ai un doute. puisque la fonction est pure. Pourquoi le compilateur n'utilise pas de transparence référentielle ou de mémo? Pourquoi la vue la recompute-t-elle encore? –
- 1. quelle est la différence entre "vue" et "fenêtre" sur iPhone?
- 2. Quelle est la différence entre un assistant et un partiel?
- 3. Quelle est la différence entre une instance et un objet?
- 4. Quelle est la différence entre un URI et une URL?
- 5. Quelle est la différence entre une méthode et un protocole
- 6. Quelle est la différence entre dict() et {}?
- 7. Quelle est la différence entre "$^N" et "$ +"?
- 8. Quelle est la différence entre = et: =
- 9. quelle est la différence entre:.! et: r !?
- 10. Quelle est la différence entre ~ et! opérateur?
- 11. Quelle est la différence entre un flux et un lecteur en Java?
- 12. Quelle est la différence entre un HashMap et un TreeMap?
- 13. Quelle est la différence entre un REPL et un interpréteur?
- 14. Quelle est la différence entre un nanokernel et un exokernel?
- 15. Quelle est la différence entre un DataSource et un DataAdapter?
- 16. Quelle est la différence entre un analyseur et un scanner?
- 17. Quelle est la différence entre un midlet et un corelet?
- 18. Quelle est la différence entre un "nonce" et un "GUID"?
- 19. Quelle est la différence entre un itérateur et un générateur?
- 20. Quelle est la différence entre un index de table et un index de vue?
- 21. Quelle est la différence entre nohup et un démon?
- 22. Quelle est la différence entre Inclusive et Exclusive OU?
- 23. Quelle est la différence entre Boost.MPI et Boost.Interprocess?
- 24. Quelle est la différence entre 'form_for @ecard' et 'form_for: ecard'?
- 25. Quelle est la différence entre la saturation et la luminosité?
- 26. Quelle est la différence entre ces importations?
- 27. Quelle est la différence entre la plate-forme et l'outil?
- 28. Quelle est la différence entre la sérialisation et l'encodage?
- 29. Quelle est la différence entre ces extraits?
- 30. Quelle est la différence entre une vue de couche de base CoreAnimation et une vue d'hébergement de couche?
@huynhj vous avez raison. Je peux mettre à jour la réponse pour le rendre plus clair –
vous pouvez laisser la réponse telle quelle. Parfois, une métaphore aide. Dans ce cas, je suis confus. La toute première phrase avait tout. – huynhjl
L'exemple de chaîne est très déroutant. – ziggystar