मैं इस विधि का उपयोग करने में सक्षम होना चाहता हूं, एक विधि को परिभाषित करने के लिए जो एक अपरिवर्तनीय केस क्लास के नए उदाहरण बनाता है। कुछ इस तरह:इस उदाहरण का उपयोग नए उदाहरणों के लिए क्यों नहीं किया जा सकता
trait Expression
{
def left : Expression
def right : Expression
def new_with_changes(l : Expression, r : Expression) : this.type
}
case class Derived(left : Expression, right : Expression)
{
def new_with_changes(l : Expression, r : Expression) : this.type =
{
new Derived(left, right)
}
}
दुर्भाग्य से, संकलक
test.scala:13: error: type mismatch;
found : Derived
required: Derived.this.type
new Derived(left, right)
^
one error found
शिकायत नया मामला वर्ग this.type कैसे मेल नहीं खाती हो?
यदि मैं इसे बदलता हूं। Base.new_with_changes में आधार पर टाइप करें और Derived.new_with_changes में व्युत्पन्न है, लेकिन ऐसा लगता है कि यह इस प्रकार की विशेषता पर अनुपलब्ध है।
संपादित करें: सवाल का असली इरादा यह है कि डाउनकास्ट के कॉलर को डाउनकास्ट करने का एक समान तरीका नहीं है, जैसा कि यह टाइप करता है, लेकिन सामान्य प्रकार के लिए। मुझे नहीं लगता कि यह आसान होगा, लेकिन यह अच्छा होगा।
हैकी, लेकिन यह काम करता है। अगर हम इस तरह कुछ भाषा में प्राप्त कर सकते हैं, तो यह अच्छा होगा। –