即時試圖找出如何使用抽象類,而不是使用類型參數來表達下面的代碼。斯卡拉特質VAL成員的比較抽象類型
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
}
我目前的版本看起來如下:
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]
。使用抽象類型有什麼更好/其他方法來實現抽象成員的排序?
我也試圖確保that:Key
類型是Double
:
def compare(that:Key { type K = Double }):Int = this.key compare that.key
但由於犯規覺得比較定義編譯器,這也將失敗。此外,是否有解決方案compare
可以通過限制K(例如type K <: Ordered[K]
)轉移到特徵密鑰?
完全避免這裏有序,並提供一個隱含的對象,參與排序[DoubleKey]。這使事情變得更容易... – Landei 2011-01-05 15:01:27