11

Làm thế nào tôi sẽ chuyển đổi:Scala chuyển đổi tham số kiểu đệ quy bị chặn (F-giáp) để gõ thành viên

trait Foo[A <: Foo[A]] 

cho một thành viên loại?

Tức là, tôi muốn một cái gì đó dọc theo dòng trong các cách sau:

trait Foo { 
    type A <: Foo {type A = ???} 
} 

nhưng tôi đang gặp khó khăn vì tên A đã được sử dụng trong các loại tinh tế. Câu hỏi này là tương tự (và sinh ra từ): F-bounded quantification through type member instead of type parameter?

Trả lời

16

Sử dụng một tự loại:

scala> trait Foo { self => type A <: Foo {type A = self.A}} 
defined trait Foo 

scala> class Bar extends Foo { type A = Bar } 
defined class Bar 

scala> class Bar extends Foo { type A = Int } 
<console>:10: error: overriding type A in trait Foo with bounds <: Foo{type A = Bar.this.A}; 
type A has incompatible type 
     class Bar extends Foo { type A = Int } 
            ^
+0

Đây là trực giác ban đầu của tôi, câu trả lời tuyệt vời! –

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