जब वह कहता है कि स्काला कई विरासतों का समर्थन नहीं करता है, तो वह कई बार एक विधि कार्यान्वयन को विरासत में संदर्भित करता है। बेशक, आप एक वर्ग में कई इंटरफेस / लक्षण लागू कर सकते हैं, और वे एक ही विधि को परिभाषित भी कर सकते हैं, लेकिन आपको विशेषता रेखीयकरण के कारण अलग-अलग कार्यान्वयन के बीच संघर्ष नहीं मिलता है।
सामान्य तौर पर, यदि आपके पास एक C1
विधि के साथ एक वर्ग है और एक विधि के साथ एक f()
वर्ग C2
भी है f()
, तो एकाधिक उत्तराधिकार का मतलब है कि आप किसी भी तरह दोनों कार्यान्वयनों को प्राप्त कर सकते हैंf()
। यह विभिन्न समस्याओं को जन्म दे सकता है, जो स्काला केवल एक ही वर्ग से और कई लक्षणों के मामले में आपको आदेश के आधार पर एक क्रियान्वयन का चयन करके देता है।
जैसा कि Nothing
चीजें वास्तव में सरल हैं, क्योंकि किसी भी चीज की कोई विशेषता या विधियां परिभाषित नहीं हैं। तो आप किसी भी विरासत संघर्ष नहीं कर सकते। लेकिन मैं यह मानता हूं कि आपका अधिकांश आश्चर्य एकाधिक उत्तराधिकार की एक अलग समझ से आता है।
एक बार जब आप समझते हैं कि विशेषता linearization प्रभावी ढंग से विरासत का कोई अस्पष्टता समाप्त, और है कि हम के रूप में कई लक्षण से प्राप्ति के लिए उल्लेख नहीं है एकाधिक वंशानुक्रम के कारण है, तो आप ठीक होना चाहिए।
यह कैसे पता चलता है: संकलक अंततः इसके लिए जिम्मेदार है। देखें स्काला भाषा विनिर्देश खंड 3.5.2 अनुरूपता, जो अन्य संपत्तियों के बीच में शामिल हैं:
For every type constructor T (with any number of type parameters), scala.Nothing <: T <: scala.Any.
या दूसरे शब्दों में, यदि आप एक कंपाइलर को सही तरीके से लागू करना चाहते हैं, तो उसे Nothing
विनिर्देशन द्वारा सब कुछ के उपप्रकार के रूप में संभालना है । स्पष्ट कारणों के लिए, Nothing
सिस्टम में लोड सभी वर्गों से विस्तार करने के लिए परिभाषित नहीं किया गया है, लेकिन सबटाइप के Nothing
रूप में परिभाषित करने की प्रासंगिकता सभी स्थानों तक सीमित है, जहां सबटिपिंग प्रासंगिक है।
यहां एक महत्वपूर्ण बिंदु यह है कि किसी प्रकार का कोई उदाहरण मौजूद नहीं है Nothing
, इसलिए, इसका उपचार सख्ती से टाइप-चेकिंग तक सीमित है, जो संकलक के दायरे में है।