Tại sao nó rằng,đồ Scala trên iterator không tạo ra tác dụng phụ
scala> List(1,2,3,4).iterator.map((x: Int) => println(x))
không in ra
1
2
3
4
khi
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ất cả làm gì?
Nói cách khác, tại sao bản đồ trên trình lặp lặp lại ánh xạ loại T thành đơn vị và có tác dụng phụ không thể hiển thị những tác dụng phụ đó?
Edit:
Cũng tại sao invocation sau lazyMap thực sự tính toán iterator mới (cung cấp các iterator mới hoàn thành) từ đầu đến cuối nếu iterator là lười biếng?
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)
Bằng cách này, bạn đang làm sai phần mở rộng của Iterable (tất cả các lớp mở rộng Iterable nên cung cấp phương thức 'newBuilder') –