2012-03-25 28 views
7

Tôi có một loạt các loại lớp lưu trữ dữ liệu trông giống nhau.Các loại phương thức phụ thuộc và loại-lớp

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

Tôi muốn đơn giản hóa mọi thứ và đã hy vọng để sử dụng các loại phương pháp phụ thuộc để có được một cái gì đó gần gũi hơn với

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 
} 

nhưng khi tôi cố gắng và tạo ra một thể hiện điều đó như sau

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") 
    } 
} 

Tôi nhận được lỗi biên dịch sau đây

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 

Tôi không hiểu vì phương pháp đó được xác định rõ ràng trên phiên bản DataStore. Lỗi có nghĩa là gì và điều này có thể xảy ra không? Nếu không, có cách nào khác để thực hiện điều tương tự không?

+0

chỉ cần kiểm tra ... bạn đang biên soạn với '-Ydependent-method-types'? – mergeconflict

+0

@mergeconflict: có, biên dịch với các kiểu phương thức phụ thuộc – purefn

Trả lời

7

Nó biên dịch bằng mốc Scala-2.10-M2, một số lỗi loại phương thức phụ thuộc đã được khắc phục kể từ bản phát hành 2.9. Tôi không hoàn toàn chắc chắn, nhưng có lẽ this one có thể đã làm cho nó hoạt động.

+0

Tôi đồng ý với @Arjan ... nó hoạt động cho tôi với phiên bản 2.10.0-SNAPSHOT mới nhất và SI-5033 có khả năng là thủ phạm. –

+0

Tuyệt vời! Cảm ơn các bạn! Thế còn 2.9.2 RC thì sao? Tôi không có một môi trường để kiểm tra dễ dàng. Đoán tôi sẽ phải sớm có một cái. – purefn

Các vấn đề liên quan