2011-09-21 9 views
8

मैं सिंगलटन वस्तुओं के साथ stackable trait pattern उपयोग करना चाहते हैं, लेकिन मैं कैसे संकलक खुश करने के लिए खोजने के लिए प्रतीत नहीं कर सकते हैं:स्टैक्टेबल विशेषता पैटर्न सिंगलटन ऑब्जेक्ट्स के साथ उपयोग किया जा सकता है?

abstract class Pr { 
    def pr() 
} 

trait PrePostPr extends Pr { 
    abstract override def pr() { 
    println("prepr") 
    super.pr() 
    println("postpr") 
    } 
} 

object Foo extends Pr with PrePostPr { 
    def pr() = println("Foo") 
} 

repl में यह मूल्यांकन करने के लिए कोशिश कर रहा है निम्न त्रुटि पैदा करता है:

<console>:10: error: overriding method pr in trait PrePostPr of type()Unit; 
method pr needs `override' modifier 
     def pr() = println("Foo") 

उत्तर

13

यह कर सकते हैं, लेकिन इस तरह:

abstract class Pr { 
    def pr() 
} 

trait PrePostPr extends Pr { 
    abstract override def pr() { 
    println("prepr") 
    super.pr() 
    println("postpr") 
    } 
} 

class ImplPr extends Pr { 
    def pr() = println("Foo") 
} 

object Foo extends ImplPr with PrePostPr 

कार्यान्वयन सुपर-क्लास/supertraits में से एक में मौजूद होना चाहिए। सारणी सूची में कार्यान्वयन के साथ वर्ग/विशेषता के बाद सार संशोधन विशेषता आनी है।

+0

आह, स्पष्टीकरण के लिए धन्यवाद! – srparish

+0

ऐसा लगता है कि एक ही नाम का उपयोग करना ठीक है, इसलिए मैं कक्षा "फू" नाम दे सकता हूं और उसके बाद ऑब्जेक्ट "फू" कक्षा "फू" का विस्तार कर सकता है। – srparish

+0

हां, यह है - उस स्थिति में ऑब्जेक्ट 'फू' को कक्षा 'फू' के साथी वस्तु कहा जाता है। – axel22