sealed abstract
और abstract
स्कैला कक्षा के बीच क्या अंतर है?स्कैला के मुहरबंद अमूर्त बनाम अमूर्त वर्ग
उत्तर
अंतर यह है कि एक सीलबंद वर्ग के सभी उप-वर्ग (चाहे वह सार है या नहीं) मुहरबंद वर्ग के समान फ़ाइल में होना चाहिए।
answered के रूप में, सभी सीधे एक सीलबंद वर्ग (सार या नहीं) के उप-वर्गों को विरासत में मिलाकर एक ही फ़ाइल में होना चाहिए। इसका एक व्यावहारिक परिणाम यह है कि यदि संकलक मिलान अपूर्ण है तो संकलक चेतावनी दे सकता है। उदाहरण के लिए:
sealed abstract class Tree
case class Node(left: Tree, right: Tree) extends Tree
case class Leaf[T](value: T) extends Tree
case object Empty extends Tree
def dps(t: Tree): Unit = t match {
case Node(left, right) => dps(left); dps(right)
case Leaf(x) => println("Leaf "+x)
// case Empty => println("Empty") // Compiler warns here
}
Tree
तो sealed
है, तो संकलक चेतावनी दी है जब तक कि अंतिम पंक्ति uncommented है।
कंपाइलर का अनुमान नहीं लगाया जा सकता है कि कोई सीलबंद' कीवर्ड नहीं है तो पैटर्न मिलान अपूर्ण है? –
@ sasha.sochka मान लीजिए कि मैं इसे संकलित करता हूं और इसे 'सीलबंद' कीवर्ड के बिना एक जार फ़ाइल में डालता हूं। यह सब उस बिंदु पर संकलित किया गया है, जिसमें 'मैच' कथन शामिल है। अब, एक और उपयोगकर्ता इस जार को पकड़ता है और _ treeends 'Tree'_ करता है। ऐसा करने से उसे रोकने में कुछ भी नहीं है, लेकिन, उस बिंदु पर, 'मैच' कथन अब पूरा नहीं हुआ है। चूंकि वह इसे संकलित नहीं कर रहा है, बस इसे अपने जार से उपयोग कर रहा है, संकलक _him_ को चेतावनी नहीं दे सकता है। और चूंकि आपने जार बनाया जब आप इसे नहीं जानते थे, इसलिए यह आपको चेतावनी नहीं दे सका। –
@DanielCSobral, आपने लिखा "लेकिन, उस * बिंदु पर, मैच स्टेटमेंट अब पूरा नहीं हुआ है"। * इस * पल पर मैच स्टेटमेंट अधूरा नहीं है, जब आप एक जार फ़ाइल बनाने से पहले, आपके द्वारा पोस्ट किए गए मूल कोड को संकलित करते हैं (लेकिन बिना 'सील किए गए' कीवर्ड के)? यह अनुमान लगाने में आसान लगता है, क्योंकि नए बच्चों के बिना भी (कंपाइलर अभी तक उनके बारे में नहीं जानता है) 'खाली' के लिए कोई शाखा नहीं है। और मैं उस व्यक्ति के लिए चेतावनी के बारे में बात कर रहा हूं जो एक जार बनाता है, न कि उस व्यक्ति के बारे में जो इसका उपयोग करता है। –
- 1. अमूर्त बनाम अमूर्त वर्ग
- 2. अमूर्त वर्ग
- 3. अमूर्त वर्ग
- 4. अमूर्त वर्ग
- 5. अमूर्त वर्ग
- 6. अमूर्त वर्ग
- 7. अमूर्त वर्ग
- 8. अमूर्त वर्ग
- 9. स्कैला: अमूर्त कक्षाएं तत्काल?
- 10. अमूर्त वर्ग और अमूर्त विधियां क्या हैं?
- 11. एक अमूर्त वर्ग बनाम नियमित कक्षा
- 12. मैं एक अमूर्त वर्ग है एक अमूर्त वर्ग
- 13. एक अमूर्त वर्ग एक और अमूर्त वर्ग मुद्दा
- 14. वहाँ एक अमूर्त वर्ग
- 15. मैं अपने अमूर्त वर्ग
- 16. सी # बेस/अमूर्त वर्ग
- 17. एक अमूर्त वर्ग
- 18. एक अमूर्त वर्ग
- 19. एक अमूर्त वर्ग
- 20. एक सामान्य अमूर्त वर्ग
- 21. गैर-अमूर्त वर्ग
- 22. एक अमूर्त वर्ग
- 23. अमूर्त वर्ग और इंटरफ़ेस
- 24. अमूर्त बनाम Encapsulation
- 25. LinqToSql और अमूर्त आधार वर्ग
- 26. शुद्ध अमूर्त वर्ग और इंटरफेस
- 27. सी # प्रतिनिधि और अमूर्त वर्ग
- 28. std :: make_shared अमूर्त वर्ग तात्कालिकता
- 29. सी # इंटरफेस खाली अमूर्त वर्ग
- 30. एक अमूर्त वर्ग क्या है?
कुछ इतना स्पष्ट नहीं है (कम से कम यह मेरे लिए नहीं था :-)) यह है कि मुहरबंद वर्ग का "भव्य बच्चा" अन्य फाइलों में भी हो सकता है: मुहरबंद वर्ग ए दिया गया; बी ए बढ़ाता है; सी विस्तार करता है बी बी एक ही फाइल में ए के रूप में होना चाहिए, लेकिन सी उसी में या दूसरे में छोड़ सकता है। –
@ सांडोरमुराकोज़ी आपको बी को एक मुहरबंद कक्षा के रूप में घोषित करना होगा, अगर आप इसे प्राप्त करना चाहते हैं। सीलिंग केवल प्रत्यक्ष विरासत से संबंधित है। – natbusa