0

Scala で Value クラスを次のように宣言しました。

sealed abstract class Value extends Expression with Ordered[Value] {
  type T <: Ordered[T]
  def value: T

  override def compare(that: Value): Int = { ... } 
}

compare型制約 T <: Ordered[T] の理由は、 Valueのメソッドを にデリゲートしたいからvalue: Tです。

次に、具体的な IntValue を次のように指定します。

case class IntValue(value: Int) extends Value {
  type T = Int
  // ... 
}

ただし、このコードをコンパイルしようとすると、次のようになります: ''

... incompatible type in overriding
[error] type T <: Ordered[IntValue.this.T] (defined in class Value);
[error]  found   : Int
[error]  required:  <: Ordered[IntValue.this.T]
[error]     (which expands to)   <: Ordered[Int]
[error]   type T = Int

ここで暗黙の変換を使用する必要があると思いますが、どのように進めればよいかわかりません。

4

1 に答える 1