0

私は、次の形式のコンテナのファミリを持っています

trait Value {
  type Internal
  implicit def order:Internal => Ordering[Internal]
  def value:Internal
}

次のように、内部タイプの順序を使用して、Valueの特定のサブタイプの順序を定義できるようにしたいと思います。

object Value {

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

}

ただし、コンパイラーは、そのような順序付けがトレイトで指定されていても、V#Internalで使用可能な暗黙の順序付けはないと言います。

私がやろうとしていることを達成する方法はありますか?

4

1 に答える 1

2

Internal.があることを確認するには、型制約が必要ですOrderingValueとして定義すると、これは簡単ですclass

abstract class Value[Internal: Ordering] {
  def value: Internal
}

特性として、このような制約を直接適用することは可能ではないと思いますが、適切なOrderingものを提供するように要求することはできます:

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
}
于 2012-07-09T19:38:46.690 に答える