उत्पादन नहीं करता है क्यों है यह है कि,स्काला नक्शा दुष्प्रभाव
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))
सब करते हैं?
दूसरे शब्दों में, यह क्यों है कि एक पुनरावर्तक पर एक मानचित्र जो टी को यूनिट टाइप करता है और साइड इफेक्ट्स उन दुष्प्रभावों को दिखाने में असमर्थ हैं?
संपादित करें:
भी क्यों 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' विधि प्रदान करना चाहिए) –