scala - define method to return type of class extending it -


मैं ऐसा कुछ करने में सक्षम होना चाहता हूं:

  गुण A { डीफ़ एफ (): ??? _ THE_EXTENDING CLASS} वर्ग सी विस्तारित करता है {एफएफ़} = खुद} वर्ग डी का विस्तार A {DEF एफ () = नया डी} वर्ग Z विस्तारित डी {डीईएफ एफ () = नया Z} < / Code>  

और निम्नलिखित कोड को संकलित नहीं किया जाएगा

  class Bad1 विस्तारित {{एफएफ एफ =) = "असंबंधित स्ट्रिंग"} श्रेणी Bad2 एक का विस्तार करता है {Def f () = नया सी / इसका अर्थ यह है कि आप केवल एक प्रकार के पैरामीटर को परिभाषित नहीं कर सकते हैं जैसे A: A [T & lt ;: A] के साथ f () परिभाषित किया जाता है f: T} class Bad3 D / / एफ () अब सही प्रकार वापस नहीं करता   

क्या इस तरह के रिश्ते का कोई नाम है? और यह कैसे स्काला में एनोटेट / कार्यान्वित किया जाता है?

संपादित करें

निम्न प्रकार की कार्य करता है, जैसा कि आप देख सकते हैं:

  scala & gt; विशेषता A {| Def च: this.Type | | } परिभाषित विशेषता एक स्केल & gt; वर्ग सी का विस्तार A {| डीफ़ एफ = यह | } परिभाषित वर्ग सी स्कला & gt; वर्ग डी का विस्तार A {| डीफ़ एफ = नया डी | } & Lt; कंसोल & gt;: 7: त्रुटि: प्रकार बेमेल;  

संपादित करें

पी> दूसरी प्रणाली का उपयोग करके, मैं यह कर सकता हूं, जो वर्ग डी की परिभाषा के लिए अच्छा है:

  scala & gt; विशेषता ए [टी एंड एलटी ;: ए [टी]] {डीफ़ एफ (): टी} परिभाषित विशेषता ए // या स्कला & gt; विशेषता ए [टी एंड एलटी ;: ए [टी]] {आत्म: टी = & gt; | डीफ़ एफ (): टी | } स्कला & gt; वर्ग सी विस्तारित करता है [सी] {डीईएफ एफ () = नया सी} परिभाषित वर्ग सी स्कला & gt; वर्ग डी सी परिभाषित वर्ग D scala & gt; (नया डी)। F res0: C = C @ 465fadce    

मुझे डर लग रहा है विस्तारित कक्षा से विस्तारित वर्ग क्या है, यह जानने की कोई संभावना नहीं है।

आप जो चाहते हैं, उसके सबसे निकटतम, क्यूरीजली रिकूरिंग टेम्पलेट पैटर्न (सीआरटीपी) के समान है जिसे सी ++ से जाना जाता है। < / P>

  विशेषता A [T & lt ;: A [T]] {def f (): T; } वर्ग सी का विस्तार A [C] {def f () = नया सी} वर्ग डी में विस्तार होता है [डी] {डीएफ एफ () = नया डी}    

Comments