क्यों करतास्कैला के समांतर अनुक्रमों में कोई विधि क्यों नहीं है?
List.range(0,100).contains(2)
कार्य है, जबकि
List.range(0,100).par.contains(2)
नहीं करता है?
भविष्य के लिए यह योजना बनाई गई है?
क्यों करतास्कैला के समांतर अनुक्रमों में कोई विधि क्यों नहीं है?
List.range(0,100).contains(2)
कार्य है, जबकि
List.range(0,100).par.contains(2)
नहीं करता है?
भविष्य के लिए यह योजना बनाई गई है?
गैर- teleological उत्तर यह है कि contains
SeqLike
में परिभाषित किया गया है लेकिन ParSeqLike
में नहीं है।
है कि आपके जिज्ञासा को संतुष्ट नहीं है, आप पा सकते हैं कि SeqLike
के contains
इस प्रकार परिभाषित किया गया है:
def contains(elem: Any): Boolean = exists (_ == elem)
तो अपने उदाहरण के लिए आप
List.range(0,100).par.exists(_ == 2)
ParSeqLike
एक याद आ रही है लिख सकते हैं कुछ अन्य तरीकों के साथ-साथ, जिनमें से कुछ कुशलतापूर्वक कार्यान्वित करना कठिन होगा (उदाहरण के लिए indexOfSlice
) और कुछ कम स्पष्ट कारणों के लिए (उदाहरण के लिए combinations
- शायद क्योंकि यह केवल छोटे डेटासेट पर उपयोगी है)। लेकिन क्या आप भी .seq
उपयोग करें यदि आप एक समानांतर संग्रह हो सकता है वापस पाने के लिए रैखिक संस्करण के लिए और अपने तरीकों वापस पाने:
List.range(0,100).par.seq.contains(2)
के लिए क्यों पुस्तकालय डिजाइनरों छोड़ दिया बाहर के रूप में ... मैं पूरी तरह अनुमान लगा रहा हूँ, लेकिन हो सकता है कि वे सादगी के लिए तरीकों की संख्या को कम करना चाहते थे, और exists
का उपयोग करना लगभग आसान है।
यह भी सवाल है, क्यों contains
बल्कि सभी संग्रह, GenTraversableOnce
, जहां आप पाते हैं exists
के granddaddy पर से SeqLike
पर परिभाषित किया गया है को जन्म देती है? एक संभावित कारण यह है कि Map
के लिए contains
Set
और Seq
पर इसके लिए एक अलग तरीका है। Map[A,B]
एक Traversable[(A,B)]
है, इसलिए contains
को Traversable
, contains
के लिए परिभाषित किया गया था, एक tuple (A,B)
तर्क लेने की आवश्यकता होगी; हालांकि Map
का contains
केवल A
तर्क लेता है। यह देखते हुए, मुझे लगता है कि contains
को GenSeqLike
में परिभाषित किया जाना चाहिए - शायद यह एक निरीक्षण है जिसे ठीक किया जाएगा।
(मैंने सोचा था कि पहले समानांतर अनुक्रमों में contains
नहीं है क्योंकि समानांतर संग्रह पर अपना लक्ष्य ढूंढने के बाद आप कहां रुकना चाहते हैं, यह रैखिक संस्करण से बहुत कम कुशल है (विभिन्न धागे बहुत अनावश्यक काम करते हैं मान मिलने के बाद: this question देखें), लेकिन यह सही नहीं हो सकता है क्योंकि exists
है।)
'indexOfSlice' समझा जाएगा क्योंकि समानांतर अनुक्रमों के क्रम में, यह सिर्फ इतना है कि वे समानांतर संचालन निष्पादित नहीं करते हैं आदेश। लेकिन एक कुशल, स्केलेबल 'इंडेक्सऑफस्लिस' अभी तक लागू नहीं किया गया है। – axel22
@ axel22 धन्यवाद, अपडेट किया गया। –
धन्यवाद बहुत उपयोगी! मुझे लगता है कि उन्होंने अभी तक इसे लागू नहीं किया है क्योंकि यह काम नहीं करता है क्योंकि आप इसकी उम्मीद करेंगे, जैसे ही इसे एक मूल्य मिल जाए। – placeybordeaux