2013-05-07 4 views
13

मैं निर्माता में ट्राइट में एक परिवर्तनीय चर को ओवरराइड करना चाहता हूं। लेकिन यह शिकायत करेगा कि "ओवरराइडिंग वैरिएबल ए टाइप टाइप इंट, वेरिएबल एक म्यूटेबल वेरिएबल ओवरराइड नहीं कर सकता"। स्कैला मुझे ऐसा करने की इजाजत क्यों नहीं देती? और इसके लिए कोई सबसे अच्छा अभ्यास? धन्यवादस्काला में ट्राइट में एक परिवर्तनीय चर को ओवरराइड कैसे करें?

trait A{ 
    var a:Int = _ 
} 

class B(override var a:Int) extends A 
+1

आप प्रश्न बनाने के लिए अपने सच्चे मामले को आसान बनाने में किया था? जैसा कि कई उत्तरों से इंगित किया गया है, वही नाम और प्रकार के साथ एक var को ओवरराइड करना बहुत बेकार है। –

उत्तर

11

आप (कारण है कि खुद को मेरे लिए अभी प्रकट नहीं करते हैं, को छोड़कर के लिए, कि वार्स वैसे भी संशोधित किया जा सकता तो उन्हें क्यों ओवरराइड) इसे ओवरराइड नहीं कर सकते, लेकिन आप घोषित चर uninitialised और प्रतिनिधि छोड़ सकते हैं उत्तरार्द्ध B:

trait A { 
    var a: Int 
} 

class B(var a: Int) extends A 
6

ओवरराइडिंग केवल विधियों के लिए है। यह एक चर को ओवरराइड करने के लिए समझ में नहीं आता है। यदि आप एक वैरिएबल को उसी प्रकार के किसी अन्य चर के साथ ओवरराइड करते हैं तो क्या परिवर्तन होते हैं? कुछ भी, मूल्य और है कि बस वैसे भी किसी भी समय निर्धारित करते हैं तो हो सकता है, क्योंकि यह एक चर रहा है:

trait A { 
    var a: Int = _ 
} 

class B (a0: Int) extends A { 
    a = a0 
} 

लेकिन वह propably नहीं है तुम क्या चाहते।

trait A { 
    def a: Int 
    def a_=(value: Int): Unit 
} 

class B(var a: Int) 

जो तब के लिए

trait A { 
    var a: Int 
} 
1

नोट बराबर बिल्कुल सुनिश्चित करें कि आप क्या एक प्रयास करने के लिए "ओवरराइड" एक "var" के साथ हासिल करना चाहते हैं: आप भी सिर्फ गेटर और सेटर सार छोड़ सकते हैं जैसा कि अन्य ने उल्लेख किया है कि आप वैसे भी बदल सकते हैं।

कई अन्य अनुमानों में से एक यह है कि आप स्वयं प्रकार के सदस्यों की तरह कुछ चाहते हैं? जहां स्वयं प्रकार की एनोटेशन आपको मिश्रित विशेषता या कक्षा के सदस्यों तक पहुंचने की अनुमति देती है, और स्कैला कंपाइलर यह सुनिश्चित करता है कि सभी निर्भरताएं सही ढंग से वायर्ड हों? यदि ऐसा है, तो कुछ ऐसा काम करेगा।

trait B{ 
var a:Int = _ 

}

trait A{self:B=> var b= a} 
class C extends A with B 
संबंधित मुद्दे