なぜそれがScalaのマップは
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))
はすべてやるながら
scala> List(1,2,3,4).iterator.map((x: Int) => println(x))
が
1
2
3
4
をプリントアウトしていない、ということである副作用を生成しないのですか?
つまり、タイプTをユニットにマップし、副作用がそれらの副作用を表示できないイテレータ上のマップは何故ですか?
編集:また
なぜ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)
ところで、あなたはIterableの間違った拡張をしています(Iterableを拡張するすべてのクラスは 'newBuilder'メソッドを提供する必要があります) –