Por qué es que,mapa Scala el iterador no produce efectos secundarios
scala> List(1,2,3,4).iterator.map((x: Int) => println(x))
no imprime a cabo
1
2
3
4
mientras
List(1,2,3,4).map((x: Int) => println(x))
List(1,2,3,4).foreach((x: Int) => println(x))
List(1,2,3,4).iterator.foreach((x: Int) => println(x))
todos lo hacen?
En otras palabras, ¿por qué es que un mapa en un iterador que correlaciona el tipo T con la unidad y tiene efectos secundarios incapaces de mostrar esos efectos secundarios?
Editar:
También por qué hace lo siguiente invocación de lazyMap realidad calcula el nuevo iterador (proporcione el nuevo iterador completa) de principio a fin si iterador es perezoso?
def lazyMap[T, U](coll: Iterable[T], f: T => U) = new Iterable[U] {
def iterator = coll.iterator map f
}
scala> lazyMap(List(1,2,3,4), (x: Int) => x + 1)
res4: java.lang.Object with Iterable[Int] = (2, 3, 4, 5)
Por cierto, estás haciendo una extensión incorrecta de Iterable (todas las clases que se extienden Iterable deberían proporcionar el método 'newBuilder') –