नहीं, यह कोई बग नहीं है। यह सामान्य व्यवहार है।
इटरेटर परिवर्तनीय चीजें हैं। आप उन्हें पॉइंटर्स के रूप में सोच सकते हैं। प्रत्येक बार जब आप इसे अगले तत्व देने के लिए एक पुनरावर्तक से पूछते हैं तो यह इंगित करता है कि यह एक स्थिति आगे बढ़ेगा।
जब आप इसे आकार देने के लिए कहते हैं तो यह अनुक्रम में प्रत्येक तत्व को पार करेगा, प्रत्येक बार एक स्थिति को दाईं ओर ले जायेगा। जब iterator.hasNext == false
को पार करने के लिए उसके पास कोई और तत्व नहीं है तो यह आकार वापस कर देगा। लेकिन तब तक यह सभी तत्वों को समाप्त कर देगा। से http
val it = Iterator(1, 2, 3, 4)
//it: >1 2 3 4
it.next() //ask for the next element
//it: 1 >2 3 4
it.next()
//it: 1 2 >3 4
println(it.size) // prints 2
//it: 1 2 3 4 >
println(it.size) // prints 0
स्रोत
2013-10-18 20:11:54
:/जब
size
के लिए एक नया कॉल किया जाता है, इटरेटर पहले से ही अंत में स्थिति में है, तो यह तुरंत 0.लौट बेहतर क्या हो रहा है यह समझने के लिए करेंगे, तो आप ऐसा कर सकते हैं /www.scala-lang.org/api/current/#scala.collection.Iterator "यह ध्यान रखना महत्वपूर्ण है कि, जब तक कि अन्यथा न कहा गया हो, * किसी को इस पर कोई विधि कॉल करने के बाद कभी भी इटरेटर का उपयोग नहीं करना चाहिए। * दोनों सबसे महत्वपूर्ण अपवाद भी एकमात्र अमूर्त विधियां हैं: अगला और अगला अगला। " –