software - scala tutorial
¿Diferencia entre Iterator y Stream en Scala? (2)
Parece que tanto Iterator como Stream son flojos y te permiten seguir devolviendo elementos al contenido de tu corazón. ¿Cuál es la diferencia entre los dos?
Ambos son construcciones para acceder a un elemento actual, que tiene una lista aún desconocida de los elementos restantes (la cola perezosa).
Iterator es una construcción imperativa que solo puede atravesar una vez.
Stream es una construcción funcional. En teoría, puede atravesarlo varias veces (y como otros mencionaron, no volverá a calcular las partes ya calculadas), pero en la práctica porque los flujos son infinitos o muy grandes (es por eso que lo usa en primer lugar), sosteniendo la referencia al flujo completo no tiene mucho sentido (se encuentra con Out Of Memory bastante fácil).
- Por lo tanto, siempre debe definir flujos utilizando
defy nunca ponerlo en variables locales que tienen un alcance de larga duración. - También hay sutilezas al escribir funciones recursivas usando Streams,
- Puede haber un comportamiento inesperado como resultado del hecho de que Scala''s
Streamno es perezoso en su cabeza, como
Por lo general, es más seguro para la mente evitar las Stream simples. Las alternativas usan EphemeralStream of Scalaz, que se auto-olvida partes no reconocidas usando referencias débiles, o usando Iteratees (ver también here ) o algo similar .
memoises secuencias y Iterador no. Puede atravesar el mismo Stream varias veces y obtener el mismo resultado cada vez. Iterador, por otro lado, solo puede atravesarse una vez.