4
A
回答
4
是,通過隱(有型的別名,使事情更加DRY),
type AA[T] = A { type B = T }
implicit def aIsOrdered[T](a : AA[T]) = new Ordered[AA[T]] {
def compare(that : AA[T]) = 0
}
樣品REPL會話,
scala> val ai1 = new A { type B = Int }
ai1: java.lang.Object with A{type B = Int} = [email protected]
scala> val ai2 = new A { type B = Int }
ai2: java.lang.Object with A{type B = Int} = [email protected]
scala> val ad = new A { type B = Double }
ad: java.lang.Object with A{type B = Double} = [email protected]
scala> ai1 < ai2
res2: Boolean = false
scala> ai1 < ad
<console>:16: error: type mismatch;
found : ad.type (with underlying type java.lang.Object with A{type B = Double})
required: AA[Int]
ai1 < ad
^
編輯...
感謝scala.math.LowPriorityOrderingImplicit中的隱式定義這個定義足以爲我們提供相應的Ordering類的類實例。這允許我們使用需要訂單的類型,例如。一個scala.collection.SortedSet,
scala> implicitly[Ordering[AA[Int]]]
res0: Ordering[AA[Int]] = [email protected]
scala> import scala.collection.SortedSet
import scala.collection.SortedSet
scala> val s = SortedSet(ai1, ai2)
s: scala.collection.SortedSet[java.lang.Object with A{type B = Int}] = TreeSet([email protected])
0
如何使B
參數爲A
?
trait A[B] {
compare(x: A[B]): Int
}
+0
抽象類型的使用恰恰是爲了消除在任何需要將類型A依賴於類型A的情況下進行定義的需要 – user44242 2011-05-11 14:43:19
相關問題
- 1. 未定義的類型特徵引用
- 2. 如何將類型約束爲特徵中的抽象類型成員?
- 3. 抽象類的特徵
- 4. 如何比較Scala特徵中的有序抽象類型?
- 5. Scala抽象類/特徵與返回子類型的方法
- 6. 編譯器錯誤「不兼容類型」
- 7. 使用Boost類型特徵的條件編譯
- 8. 使用虛擬類型(抽象類型)
- 9. 在抽象方法中使用non-cls兼容類型
- 10. Haskell:類型類是否可以定義類型(ala類型特徵)
- 11. 排序抽象數據類型在Haskell
- 12. 定義排除特定類型的
- 13. 泛型編譯問題:不兼容的類型
- 14. 如何使用類型特徵來進行條件編譯?
- 15. 從基類使用類型特徵
- 16. C++類型特徵
- 17. 使用特徵的相關類型作爲參數綁定的特徵
- 18. 子類特徵類型
- 19. 抽象類型
- 20. 抽象子類通用的方法,但它使用子類特定類型
- 21. 抽象類型的Ada OOP「generic」類型
- 22. Scala中的特徵與抽象類
- 23. 「兼容的指針類型」 編譯用C
- 24. 另一個Java泛型「不兼容類型」編譯錯誤
- 25. Java泛型不兼容類型編譯時錯誤
- 26. 使用抽象爲枚舉類型?
- 27. 使用GeoDjango模型作爲抽象類
- 28. 如何使用遞歸類型簽名來定義所有擴展共同特徵的對象的類型
- 29. 科特林檢查類型不兼容的類型
- 30. 如何表達綁定在另一個泛型類型的特徵綁定的類型參數上的特徵?
也許可以幫助你:是否可以使用隱式的證據來強制抽象類型之間的靜態類型的兼容性?](http://stackoverflow.com/questions/5909890/is - 可能使用隱式證據 - 強制 - 靜態類型 - 兼容性 - 之間/ 5910291#5910291) – 2011-05-11 13:56:35
@ user44242好的,Miles詳細說明了它。 – 2011-05-11 13:58:05