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?
chỉ cần kiểm tra ... bạn đang biên soạn với '-Ydependent-method-types'? – mergeconflict
@mergeconflict: có, biên dịch với các kiểu phương thức phụ thuộc – purefn