Option
परोक्ष एक Iterable
के लिए परिवर्तनीय है - लेकिन क्यों यह न सिर्फ बस Iterable
सीधे लागू करता है:विकल्प Iterable विशेषता का विस्तार क्यों नहीं करता है?
def iterator = new Iterator[A] {
var end = !isDefined
def next() = {
val n = if (end) throw new NoSuchElementException() else get
end = true
n
}
def hasNext = !end
}
संपादित करें:वास्तव में यह उससे भी WEIDER है क्योंकि 2.8 Option
में एक iterator
प्रणाली की घोषणा करता है :
def iterator: Iterator[A] =
if (isEmpty) Iterator.empty else Iterator.single(this.get)
आप हमेशा स्रोत कोड बदल सकते हैं और देख सकते हैं कि क्या ब्रेक। :-) –
ठीक है, 'isEmpty' को स्टार्टर्स के लिए' ओवरराइड 'संशोधक की आवश्यकता होगी! मैंने सोचा कि क्या यह एक वैचारिक बात है –
मुझे लगता है कि ऐसा इसलिए है क्योंकि विकल्प एक मोनड है और संग्रह नहीं है। मेरे लिए यह समझ में आता है कि संग्रह अचूक हैं, लेकिन एक मोनड तुरंत संग्रह नहीं है। बीटीडब्ल्यू: मुझे स्कैला 2.7 के बारे में पता नहीं है, लेकिन 2.8 विकल्प .इटरेटर में Iterator.empty और Iterator.single का उपयोग करके लागू किया गया है। –