2013-02-25 76 views
7

मैं उस तरह कुछ करने के लिए कोशिश कर रहा हूँ:सभी मामले वर्गों का समर्थन प्रति के लिए आम विशेषता बनाएँ (आईडी = newId) विधि

trait IdentifiableModel[T] { 
    self: { def copy(id: ObjectId): T } => 

    val id: ObjectId 
} 

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

+0

मैं खुले किसी भी समाधान के लिए दिमाग हूँ, मुझे लगता है कि यह सही मैक्रो का उपयोग करने के लिए संभव हो सकता है? –

+0

यह वास्तव में क्या है जिसे आप प्राप्त करना चाहते हैं? मुझे बताएं कि क्या मैं सही हूं: आपके पास एक अद्वितीय 'आईडी' फ़ील्ड के साथ केस क्लास का एक सेट है और स्वचालित रूप से जेनरेट की गई 'प्रतिलिपि विधि' को पॉलिमॉर्फिक रूप से कॉल करने में सक्षम होना चाहता है (यानी, उनके सामान्य बेस क्लास 'पहचान योग्य मॉडल' के माध्यम से) ? –

+0

यह अंतर्निहित मैक्रो के उपयोग के माध्यम से हासिल किया जा सकता है, यानी एक केस क्लास 'टी' उदाहरण से एक आईडी आईडी: ऑब्जेक्टआईडी' फ़ील्ड को 'पहचान योग्य मॉडेल [टी] {डीफ़ कॉपी (आईडी: ऑब्जेक्टआईडी) में एक अंतर्निहित रूपांतरण होने के कारण प्राप्त किया जा सकता है: टी } '। स्केल 2.10.1 में, अंतर्निहित मैक्रोज़ में एक बग के कारण, (https://issues.scala-lang.org/browse/SI-5923), आपको अस्तित्व के प्रकारों के साथ एक चाल का उपयोग करना होगा, जब तक आप प्रतीक्षा नहीं कर सकते 2.10.2 के लिए, ऐसा लगता है। हालांकि मुझे आपके पूर्ण उपयोग के मामले के बारे में और जानने में दिलचस्पी होगी, यह जांचने के लिए कि ऊपर उल्लिखित कार्य किया जाएगा। – Leo

उत्तर