Die Scala-Karte im Iterator verursacht keine Nebenwirkungen

Warum ist es das,

scala> List(1,2,3,4).iterator.map((x: Int) => println(x))

druckt nicht aus

1
2
3
4

während

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))

alle machen?

Mit anderen Worten, warum ist es so, dass eine Karte auf einem Iterator Typ T auf Unit abbildet und Nebenwirkungen aufweist, die diese Nebenwirkungen nicht anzeigen können?

Bearbeiten:

Warum berechnet der folgende Aufruf von lazyMap tatsächlich den neuen Iterator (den vollständigen neuen Iterator bereitstellen) von Anfang bis Ende, wenn der Iterator faul ist?

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)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage