Scala 抽象参数的视图边界:关于排序的用例

Scala 抽象参数的视图边界:关于排序的用例,scala,Scala,我有一系列的容器 trait Value { type Internal implicit def order:Internal => Ordering[Internal] def value:Internal } 我希望能够使用内部类型上的排序,为值的特定子类型定义排序,如: object Value { implicit def order[V <: Value]:Ordering[V] = Ordering((_:V).value) } 对象值{ 隐式定

我有一系列的容器

trait Value {
  type Internal
  implicit def order:Internal => Ordering[Internal]
  def value:Internal
}
我希望能够使用内部类型上的排序,为值的特定子类型定义排序,如:

object Value {

  implicit def order[V <: Value]:Ordering[V] = Ordering((_:V).value)

}
对象值{

隐式定义顺序[V您需要对
内部
进行类型约束,以确保它具有
顺序
。如果您将
定义为
,这很容易:

abstract class Value[Internal: Ordering] {
  def value: Internal
}
作为一种特征,我认为这不可能直接应用这样的约束,但您可以要求提供合适的
订购

trait Value {
  type Internal
  def value: Internal
  implicit val ord: Ordering[Internal]
}
并用作

class Foo extends Value {
  type Internal = Int
  def value = 42
  implicit val ord = Ordering[Internal]  // Ordering's apply method
}