sealed class A
class B1 extends A
class B2 extends A
मान लिया जाये कि हम वर्ग A
की वस्तुओं की एक सूची है: वैल एल: सूची [एक] = सूची (नई बी 1, बी 2 नई, नई बी 1, नई बी 1)isInstanceOf का उपयोग कब करें और मैच-केस-स्टेटमेंट (स्कैला में) का उपयोग कब करें?
और हम बाहर फ़िल्टर करना चाहते हैं प्रकार बी 1 के तत्व। फिर हम एक विधेय की जरूरत है और दिए गए दो विकल्पों का उपयोग कर सकते:
l.filter(_.isInstanceOf[B1])
या
l.filter(_ match {case b: B1 => true; case _ => false})
व्यक्तिगत रूप से, मैं पहली बार दृष्टिकोण अधिक पसंद है, लेकिन मैं अक्सर पढ़ते हैं, एक match-case
बयान अधिक का उपयोग करना चाहिए अक्सर (उन कारणों से जिन्हें मैं नहीं जानता)।
इसलिए, सवाल यह है: match-case
कथन के बजाय isInstanceOf
का उपयोग करने में कमी है? किसी को किस दृष्टिकोण का उपयोग करना चाहिए (और यहां किस दृष्टिकोण का उपयोग किया जाना चाहिए और क्यों)?
और आपको अंत में संक्षिप्त प्रकार ('सूची [बी 1] ') देता है। –
बहुत अधिक पठनीय लगता है, धन्यवाद।लेकिन इस कथन में डिफ़ॉल्ट मामला क्या होगा? इस शॉर्टकट केस स्टेटमेंट और इसका उपयोग कैसे किया जाता है, इसके बारे में मैं और अधिक पृष्ठभूमि जानकारी कहां पढ़ सकता हूं? –
@ जॉन थ्रीपवुड [इस पोस्ट] पर एक नज़र डालें (http://ochafik.com/blog/?p=393)। यह सबसे अच्छा नहीं है, लेकिन अभी भी बहुत अच्छा "संग्रह का कारण" है। संक्षेप में, संग्रह नक्शा की तरह है, लेकिन केवल उन मानों के लिए एक कार्य करें जो * (आंशिक) * फ़ंक्शन के लिए परिभाषित किया गया है जिसे आप इस विधि में पास करते हैं। इस मामले में मिलान करने वाला स्कैला का पैटर्न [आंशिक फ़ंक्शन] (http://stackoverflow.com/questions/5668053/scala-partial-functions) के शीर्ष पर किया जाता है। इसके अलावा, आपको घुंघराले ब्रैकेट का उपयोग करने की आवश्यकता है। –