2012-03-25 13 views
7

Birbirine benzeyen bir sürü veri deposu tipi sınıfı var.Bağımlı yöntem türleri ve tür sınıfları

trait FooStore[C] { 
    def create(f: FooId => Foo)(c: C): Foo 
    // update and find methods 
} 
bir şeyleri basitleştirmek istiyorum ve

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 
} 

daha yakın bir şey almak için bağımlı yöntem türlerini kullanmak umuduyla ama denemek ve bunun bir örneğini oluştururken

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") 
    } 
} 
şöyle oldu

aşağıdaki derleme hatayı

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 
olsun

Bu yöntem, DataStore örneğinde açıkça tanımlandığı için anlamıyorum. Hata ne anlama geliyor ve bu mümkün mü? Değilse, aynı şeyi başarmanın farklı bir yolu var mı?

+0

Sadece kontrol ediliyorsunuz? -Yespendent-method-types 'ile mi çalışıyorsunuz? – mergeconflict

+0

@mergeconflict: Evet, bağımlı yöntem türleri ile derleme – purefn

cevap

7

Scala-2.10-M2 kilometre taşını kullanarak derler, bazı bağımlı yöntem türleri, 2.9 sürümünden beri giderilmiştir. Tamamen emin değilim, ama belki de this one çalışmasını sağlamış olabilir.

+0

@Arjan ile katılıyorum ... en son 2.10.0-SNAPSHOT ile çalışıyorum ve SI-5033 muhtemelen suçlu gibi görünüyor. –

+0

Harika! Teşekkürler beyler! 2.9.2 RC'den ne haber? Bunu kolayca test edebilecek bir ortamım yok. Sanırım yakında bir tane almak zorunda kalacağım. – purefn