मैं "स्कैला 2ed में प्रोग्रामिंग" पढ़ रहा हूं। धारा 24.4 में, यह ध्यान दिया गया है कि इटेबल में कई विधियां हैं जिन्हें बिना किसी इटेटर के कुशलता से लिखा जा सकता है। तालिका 24.2 में इन विधियों को शामिल किया गया है। हालांकि, मुझे समझ में नहीं आता कि उनमें से कुछ को इटेटरेटर पर कुशलता से लागू क्यों नहीं किया जा सकता है। उदाहरण के लिए, zipWithIndex पर विचार करें।ज़ीपविथ इंडेक्स इटरबल में क्यों लागू किया गया है और ट्रैवर्सबल नहीं है?
def zipWithIndex[A1 >: A, That](implicit bf: CanBuildFrom[Repr, (A1, Int), That]): That = {
val b = bf(repr)
var i = 0
for (x <- this) {
b += ((x, i))
i +=1
}
b.result
}
इस परिभाषा को ट्रैवर्स करने के लिए क्यों नहीं ले जाएं? ऐसा लगता है कि कोड बिल्कुल वही हो सकता है और कुशलता में कोई अंतर नहीं होगा।
बस 'traversable पर' zipWithIndex' के लिए एक उपयोग के मामले में जोड़ना चाहते थे '। क्या होगा यदि आप एक ट्रैवर्सबल से यादृच्छिक तत्व चुनने के लिए एक विधि लागू कर रहे हैं? तत्वों पर पुनरावृत्ति करते समय, आपको संभावनाओं के साथ मदद करने के लिए एक अनुक्रमणिका की आवश्यकता होती है, भले ही सूचकांक संरचना के साथ एक सतत स्थान के अनुरूप न हो। – schmmd