型パラメータを使用する代わりに抽象型を使用して以下のコードを表現する方法を理解しようとしています。抽象型との型のvalメンバーのスカラの比較
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
が、比較すると思いますdoesntのコンパイラが定義されているので、これも失敗します。また、K(例えばtype K <: Ordered[K]
)を制限することによってcompare
を形質キーに移動できる解決策がありますか?
私は完全にここに発注を避けるためにお勧め、との思いOrdering [DoubleKey]を伴う暗黙のオブジェクトを提供します。それは物事をはるかに簡単になります... – Landei