मेरे पास दो केस क्लास हैं जो एक सार आधार वर्ग से प्राप्त होते हैं। मैं अमूर्त बेस क्लास पर कुछ विधियों को परिभाषित करना चाहता हूं जो विरासत केस कक्षाओं पर कॉपी विधियों का उपयोग करते हैं (और इसलिए बाल वर्ग का एक उदाहरण लौटाते हैं।) क्या स्वयं प्रकारों का उपयोग करके ऐसा करने का कोई तरीका है?स्कैला: क्या माता-पिता वर्ग के लिए केवल बच्चों द्वारा परिभाषित विधियों तक पहुंचने का कोई तरीका है?
उदाहरण कोड:
abstract class BaseClass(a: String, b: Int) {
this: case class => //not legal, but I'm looking for something similar
def doubleB(newB: Int) = this.copy(b = b * 2) //doesn't work because BaseClass has no copy
}
case class HasC(a: String, b: Int, c: Boolean) extends BaseClass(a, b) {
def doesStuffWithC(newC: Boolean) = {
...
}
}
case class HasD(a: String, b: Int, D: Double) extends BaseClass(a, b) {
def doesStuffWithD(newD: Double) = {
...
}
}
मैं समझ गए होंगे कि कैसे परिणाम मैं इस सवाल के लिए धन्यवाद चाहते हैं: How to use Scala's this typing, abstract types, etc. to implement a Self type? लेकिन यह BaseClass करने के लिए एक makeCopy विधि जोड़ने और के लिए एक कॉल के साथ यह अधिभावी शामिल प्रत्येक बच्चे के मामले वर्गों में प्रतिलिपि बनाएँ, और वाक्यविन्यास (विशेष रूप से स्वयं के प्रकार के लिए) काफी उलझन में है। स्केल के स्वयं टाइपिंग में निर्मित के साथ ऐसा करने का कोई तरीका है?
किसी ने जवाब दिया कि केस वर्ग सभी 'उत्पाद' का विस्तार करते हैं, जो सत्य है, लेकिन इसे हटा दिया गया था, संभवतः क्योंकि 'प्रति'' उत्पाद 'पर परिभाषित नहीं किया गया है, इसलिए यह स्वयं प्रकार के लिए इसका उपयोग करने के लिए काम नहीं करता है। 'उत्पाद' के लिए दस्तावेज़ कहता है "सभी केस वर्ग सिंथेटिक रूप से जेनरेट किए गए तरीकों के साथ उत्पाद को लागू करते हैं" - क्या इसका मतलब है कि मैं भाग्य से बाहर हूं? –