10

सभी स्कैला कक्षाएं ScalaObject से क्यों प्राप्त होती हैं हालांकि यह विशेषता पूरी तरह से खाली है और AnyRef की तुलना में कोई (दृश्यमान) कार्यक्षमता नहीं है, जो अतिरिक्त विधियों को परिभाषित करती है?`ScalaObject` क्यों मौजूद है?

क्या equals() या जैसी विधि कॉल धीमा नहीं होगा क्योंकि इसे किसी अन्य वर्ग को ध्यान में रखना होगा (जो विधियों को ओवरराइड कर सकता है)?

क्या किसी भी कक्षा में AnyRef और ScalaObject को फोल्ड करना संभव नहीं है?

अद्यतन: स्काला के नए संस्करण के साथ 2.10 ScalaObject was eradicated

उत्तर

11

ScalaObject एक $tag विधि है, जो, library source code for 2.7 में टिप्पणी के अनुसार, सम्मिलित करता है "भाव जो मामले वर्गों के निर्माताओं पर से मेल मिलान पैटर्न के अनुकूलन के लिए की जरूरत है।" चूंकि नाम $ से शुरू होता है, इसलिए इसे निश्चित रूप से एप्लिकेशन प्रोग्रामर के लिए "छुपा" माना जाना चाहिए। स्कैला 2.8 में, यह पूरी तरह से खाली है, इसलिए मुझे लगता है कि यह पिछड़ा संगतता के लिए है।

+0

क्यों कोई टैग टैग विधि AnyRef में डाली गई नहीं है? – soc

+0

पिछड़ा संगत, मुझे लगता है। (2.8 स्रोत कोड को डाउनलोड करने और पढ़ने के बाद मेरा जवाब विस्तारित किया गया।) –

+0

मैंने कंपाइलर कोड के माध्यम से grepped किया है और इसे एक विशेष तरीके से फ़ाइल करने के लिए कुछ कोड है (फ़ाइल 'Global.scala'), लेकिन कोई स्पष्टीकरण क्यों नहीं है। –

4

यह स्थिर विश्लेषण के लिए एक आसान हुक भी बनाता है। उदाहरण के लिए, कल्पना करें कि आपके पास एक उपकरण था जो कोड बेस (संकलित या नहीं) के माध्यम से खोज सकता है, और आपको बता सकता है कि आप इनमें से एक विशेषता निकालने के द्वारा समेकन/युग्मन/परत-संतुलन/जो कुछ है, उसके कुछ मीट्रिक में सुधार कर सकते हैं कक्षाएं और उन वर्गों के लिए एक निहित रूपांतरण बनाएँ। यह टूल समझदारी से केवल उन लक्षणों पर रिपोर्ट करेगा जो किसी भी जावा क्लास से लाभप्रद अंतर्निहित रूपांतरण की रिपोर्ट करते समय स्काला ऑब्जेक्ट के उत्तराधिकारी वर्गों से लाभप्रद रूप से निकाले जा सकते हैं। जावा टूल से शून्य रिटर्न को अनदेखा करते समय, वही टूल ScalaObject उप-वर्गों (जहां विकल्प या समान आमतौर पर बेहतर विकल्प होता है) से किसी भी संभावित "शून्य" रिटर्न पर रिपोर्ट करेगा।

7

विधि प्रेषण कक्षा उत्तराधिकारी संरचना को कार्यान्वित करने की तलाश में नहीं है। संकलक प्रत्येक वर्ग के लिए नेट विधि प्रेषण तालिका बनाता है जो इसके शुद्ध ओवरराइड/विरासत विधि वंश को दर्शाता है। यह सभी टाइपिंग को स्थिर रूप से हल करने के गुणों में से एक है।

संबंधित मुद्दे