2010-04-09 21 views
16

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) 
+1

आप हमेशा स्रोत कोड बदल सकते हैं और देख सकते हैं कि क्या ब्रेक। :-) –

+0

ठीक है, 'isEmpty' को स्टार्टर्स के लिए' ओवरराइड 'संशोधक की आवश्यकता होगी! मैंने सोचा कि क्या यह एक वैचारिक बात है –

+0

मुझे लगता है कि ऐसा इसलिए है क्योंकि विकल्प एक मोनड है और संग्रह नहीं है। मेरे लिए यह समझ में आता है कि संग्रह अचूक हैं, लेकिन एक मोनड तुरंत संग्रह नहीं है। बीटीडब्ल्यू: मुझे स्कैला 2.7 के बारे में पता नहीं है, लेकिन 2.8 विकल्प .इटरेटर में Iterator.empty और Iterator.single का उपयोग करके लागू किया गया है। –

उत्तर

9

मैं सोच रहा हूँ वहाँ थे कि कई ग़ैर-अतर्कसंगत तरीकों कि आवश्यकता होगी। उदाहरण के लिए, क्या आप वापसी मान होने की अपेक्षा करेंगे के लिए:

Some(1) ++ Some(2) 

यह वर्तमान में संकलित करता है तथा (1,2) सूची में 2.8 में implicits के माध्यम से मूल्यांकन करता है, लेकिन अजीब लगता है।

Only potentially unbounded collections should directly sub-class Iterable 

संपादित करें:: के रूप में नीचे @ Mattr की टिप्पणी में दिखाया गया है, मुझे उप-प्रकार संग्रह करने के लिए दस्तावेज़-टिप्पणी सिफारिश बाहर छोड़ने के संभावित भ्रामक है

शायद यही वजह है कि 2.7 में डॉक टिप्पणियां कहना है । और इस विचार पर विचार करते हुए "विकल्प संग्रह संग्रह का विस्तार क्यों नहीं करता है?"

+2

प्रलेखन कहता है, "यदि किसी संग्रह में एक ज्ञात आकार है, तो उसे उप-प्रकार संग्रह भी होना चाहिए। केवल संभावित रूप से असंबद्ध संग्रह सीधे उप-वर्ग Iterable होना चाहिए"। –

+0

@ मैट - यदि आप इसे उत्तर के रूप में पोस्ट करते हैं, तो यह स्वीकार कर लिया जाएगा! –

+0

@oxbow: मुझे यकीन नहीं है कि यह चाहिए! प्रश्न तब केवल थोड़ा अलग है: विकल्प को उप-प्रकार संग्रह क्यों नहीं करना चाहिए, जो "तत्वों की सीमित संख्या वाले संग्रहों का वर्णन करने के लिए उपयोग किए जाने वाले इटेरिएबल का संस्करण" है? –

संबंधित मुद्दे