स्काला में, आप क्या कर सकते हैंस्कैला संग्रह के प्रकार को क्यों बनाए रखता है Iterable (.Net में) के रूप में वापस नहीं?
val l = List(1, 2, 3)
l.filter(_ > 2) // returns a List[Int]
val s = Set("hello", "world")
s.map(_.length) // returns a Set[Int]
सवाल यह है: क्यों यह उपयोगी है?
स्कैला संग्रह संभवतः एकमात्र मौजूदा संग्रह ढांचा है जो ऐसा करता है। स्कैला समुदाय इस बात से सहमत है कि इस कार्यक्षमता की आवश्यकता है। फिर भी, कोई भी अन्य भाषाओं में इस कार्यक्षमता को याद नहीं करता है। उदाहरण सी # (संशोधित नामकरण स्काला के मैच के लिए):
var l = new List<int> { 1, 2, 3 }
l.filter(i => i > 2) // always returns Iterable[Int]
l.filter(i => i > 2).toList // if I want a List, no problem
l.filter(i => i > 2).toSet // or I want a Set
नेट में, मैं हमेशा वापस एक Iterable हो और यह मेरे लिए क्या मैं इसके साथ क्या करना चाहते है। (यह .NET संग्रह को बहुत सरल बनाता है)।
सेट के साथ स्कैला उदाहरण मुझे स्ट्रिंग के सेट से लंबाई का सेट बनाने के लिए मजबूर करता है। लेकिन क्या होगा यदि मैं सिर्फ लंबाई में पुनरावृत्ति करना चाहता हूं, या लम्बाई की सूची बनाना चाहता हूं, या बाद में फ़िल्टर करने के लिए इटरबल को रखना चाहता हूं। एक सेट का निर्माण तुरंत व्यर्थ लगता है।
(संपादित: collection.view सरल नेट कार्यक्षमता, अच्छा प्रदान करता है)
मुझे यकीन है कि तुम मुझे जहां नेट दृष्टिकोण बिल्कुल गलत है या प्रदर्शन को मारता उदाहरण दिखा देंगे हूँ, लेकिन मैं तो बस किसी भी नहीं देख सकते हैं (वर्षों के लिए .NET का उपयोग कर)।
"यह .NET संग्रह को बहुत सरल बनाता है" मैं इसे टूटा दूंगा। जब आप 'सूची' पर कुछ संचालन करते हैं तो उसे 'सूची' क्यों नहीं लौटाया जाना चाहिए? क्या आप अनुशंसा करेंगे कि 'list.remove (1)' भी 'Iterable' देता है? => अलग राय। शायद आप सवाल थोड़ा कम तर्कवादी बना सकते हैं? – soc
पहले उदाहरण में नोटिस करने के लिए एक इंटरस्टेस्टिंग चीज यह है कि 's.map (_। Length)' 'सेट' देता है जिसमें केवल एक तत्व होता है (पूर्णांक 5), क्योंकि "हैलो" और "दुनिया" दोनों की लंबाई होती है 5. – barjak
@soc - मुझे लगता है, 1 हटाए गए सूची को एक सूची होना चाहिए, है ना? फ़िल्टर के मानचित्र का उपयोग करके, यह इतना स्पष्ट नहीं है कि कौन सा दृष्टिकोण बेहतर है। वैसे भी, जब आवश्यक हो तो मैं केवल विचारों का उपयोग कर सकता हूं, इसलिए समस्या हल हो गई। –