それはなぜか、
scala> List(1,2,3,4).iterator.map((x: Int) => println(x))
印刷されません
1
2
3
4
その間
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))
すべてですか?
言い換えれば、タイプ T を Unit にマップし、副作用を持つイテレーターのマップがそれらの副作用を表示できないのはなぜですか?
編集:
また、イテレーターが遅延している場合、次の lazyMap の呼び出しが実際に新しいイテレーターを最初から最後まで計算する (完全な新しいイテレーターを提供する) のはなぜですか?
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)