의 스칼라 비교 형식 매개 변수를 사용하는 대신 추상 형식을 사용하여 아래 코드를 표현하는 방법을 알아 내려고합니다.특성 형 요소와 추상 형
trait Key extends Ordered[Key] {
type K
val key:K
}
case class DoubleKey(val key:Double) extends Key {
type K = Double
def compare(that:Key):Int = this.key compare that.key.asInstanceOf[K]
}
을하지만이 유형의 K에 명시 적으로 캐스팅 행복하지 않다 : that.key.asInstanceOf[K]
다음과 같이
trait Key[T] extends Ordered[Key[T]] {
val key:T
}
case class DoubleKey(key:Double) extends Key[Double] {
def compare(that:Key[Double]):Int = this.key compare that.key
}
나의 현재 버전은 보인다. 추상적 유형을 사용하여 추상 멤버에 대한 주문을 수행하는 것이 더 좋고/다른 방법이 있습니까?
는 또한that:Key
의 유형이
Double
있는지 확인하기 위해 노력했다 :
def compare(that:Key { type K = Double }):Int = this.key compare that.key
하지만이 또한 정의 비교 생각 나던 컴파일러 때문에 실패합니다. 또한, compare
이 K를 제한하여 특성 키로 이동할 수있는 솔루션이 있습니까 (예 : type K <: Ordered[K]
)?
내가 좋을 것 완전히 여기에 발주하고,에 방지하는 방법 Ordering [DoubleKey]를 수반하는 암시 적 객체를 제공합니다. 그게 훨씬 더 쉽게 ... – Landei