Tôi muốn thư giãn các ràng buộc về tham số kiểu của đặc điểm và thay vào đó áp đặt chúng trên phương thức dưới dạng tham số bằng chứng. Với một số thiết lập xương:Trao đổi giới hạn trên của thông số loại cho một tham số bằng chứng
trait State[Repr]
object Observer {
def apply[Repr <: State[Repr]](reader: Reader[Repr]): Observer[Repr] =
new Observer[Repr] {}
}
trait Observer[A]
trait Reader [A]
này hoạt động:
trait StateX[Repr <: StateX[Repr]] extends State[Repr] {
protected def reader: Reader[Repr]
def observe: Observer[Repr] = Observer(reader)
}
Và đây không:
trait StateY[Repr] extends State[Repr] {
protected def reader: Reader[Repr]
def observe(implicit ev: Repr <:< State[Repr]): Observer[Repr] = Observer(reader)
}
Với thông điệp "inferred type arguments [Repr] do not conform to method apply's type parameter bounds [Repr <: State[Repr]]"
. Kể từ khi các bằng chứng ev
cho thấy cấu trúc này, tôi tự hỏi làm thế nào StateY
có thể được cố định.