संभव डुप्लिकेट:
What is the difference between scala self-types and trait subclasses?ऑब्जेक्ट स्व-एनोटेशन का क्या अर्थ है?
मैं संकलक, जहां प्रोग्रामर प्रकट होता है कि एक विशेषता है एनोटेट एक के साथ Mixin हो जाएगा करने के लिए एक वादा के रूप में एक आत्म एनोटेशन को समझते हैं। उदाहरण के लिए:
scala> trait X
defined trait X
scala> trait Y { this: X => }
defined trait Y
scala> new Y {}
<console>:10: error: illegal inheritance;
self-type Y does not conform to Y's selftype Y with X
new Y {}
^
scala> new Y with X {}
res1: Y with X = [email protected]
पिछले उदाहरण में, तीसरी अभिव्यक्ति विफल रही क्योंकि हमने नए उदाहरण में मान्य एक्स सेट नहीं किया था। जाहिर है, आखिरी एक अच्छा काम करता है। अब तक सब ठीक है. और अब, चलिए एक और उदाहरण देखें जिसमें एक वस्तु शामिल है।
scala> object Z { this: X => }
defined module Z
मैं समझता हूँ कि वस्तु अगली पंक्तियों में, जहां लक्षण थोड़ा संशोधित किया गया है में प्रतिनिधित्व के रूप में एक्स वादे के साथ नाकाम रहने के (हम एक भविष्य वादे के साथ अब एक उदाहरण बना रहे हैं!) Instantiated की जा रही है,:
scala> trait X { class X1 }
defined trait X
scala> trait Y { this: X => new X1 }
defined trait Y
scala> object Z { this: X => new X1 }
<console>:8: error: not found: type X1
object Z { this: X => new X1 }
^
तो ऑब्जेक्ट स्व-एनोटेशन का क्या अर्थ है?
मुझे लगता है कि वर्ग के मामले में, उदाहरण के लिए: "वर्ग एक {इस: एक्स => नई एक्स 1}" आप "एक्स के साथ नए ए 'के साथ खेल सकते हैं, तो यह समझ है, लेकिन मैं किसी भी स्थिति जहां नहीं मिल सकता है किसी को किसी ऑब्जेक्ट में स्वयं एनोटेशन की आवश्यकता हो सकती है। – jeslg
सच है, वस्तुओं और अंतिम कक्षाओं के लिए, यह कोई समझ नहीं आता कि मैं देख सकता हूं। – axel22
आपको याद है, मुझे लगता है कि अगर वे एक विशेषता या कक्षा के सदस्य हैं तो वस्तुओं को वास्तव में ओवरराइड किया जा सकता है। –