2012-03-25 20 views
7

मैं डेटा स्टोर प्रकार वर्गों है कि सभी एक ही लग रही का एक समूह मिल गया है।निर्भर विधि प्रकार और प्रकार वर्गों

trait FooStore[C] { 
    def create(f: FooId => Foo)(c: C): Foo 
    // update and find methods 
} 

मैं चीजों को आसान बनाने के लिए करना चाहते हैं और आश्रित विधि प्रकार का उपयोग करने

sealed trait AR { 
    type Id 
    type Type 
} 

sealed trait FooAR extends AR { 
    type Id = FooId 
    type Type = Foo 
} 

trait DataStore[C] { 
    def create(ar: AR)(f: ar.Id => ar.Type)(c: C): ar.Type 
} 

के करीब कुछ पाने की उम्मीद कर रहा था लेकिन जब मैं कोशिश करते हैं और इस बात का एक उदाहरण बनाने के रूप में इस

case class InMemory(foos: List[Foo]) 
object InMemory { 
    lazy val InMemoryDataStore: DataStore[InMemory] = new DataStore[InMemory] { 
    def create(ar: AR)(f: ar.Id => ar.Type)(c: InMemory): ar.Type = sys.error("not implemented") 
    } 
} 

मैं निम्नलिखित संकलन त्रुटि

object creation impossible, since method create in trait DataStore of type (ar: AR)(f: ar.Id => ar.Type)(c: InMemory)ar.Type is not defined 
    lazy val InMemoryDataStore: DataStore[InMemory] = new DataStore[InMemory] { 
                 ^
one error found 
प्राप्त

मुझे समझ में नहीं आता है क्योंकि उस विधि को DataStore उदाहरण पर स्पष्ट रूप से परिभाषित किया गया है। त्रुटि का क्या अर्थ है और क्या यह संभव है? यदि नहीं, तो क्या एक ही चीज़ को पूरा करने का कोई अलग तरीका है?

+0

सिर्फ जाँच ... आप '-Ydependent-विधि-types' साथ संकलन कर रहे हैं? – mergeconflict

+0

@mergeconflict: हाँ, निर्भर विधि प्रकार – purefn

उत्तर

7

यह स्काला 2.10-M2 मील का पत्थर का उपयोग कर संकलित, कुछ निर्भर विधि प्रकार कीड़े 2.9 रिलीज के बाद से किया गया है। मुझे पूरी तरह से यकीन नहीं है, लेकिन शायद this one ने इसे काम कर दिया होगा।

+0

मैं @Arjan से सहमत साथ संकलन ... यह मेरे लिए नवीनतम 2.10.0-स्नैपशॉट के साथ काम करता है, और एसआई-5033 अपराधी के रूप में होने की संभावना लगती है। –

+0

बढ़िया! धन्यवाद दोस्तों! 2.9.2 आरसी के बारे में क्या? मेरे पास आसानी से परीक्षण करने के लिए एक पर्यावरण नहीं है। मुझे लगता है कि मुझे जल्द ही एक प्राप्त करना होगा। – purefn

संबंधित मुद्दे