2

Int や Byte などの何らかの形式の整数を取り、無限大、無限大、および null を含むように拡張する ExtendedNumber というパラメーター化されたクラスを定義したいと思います。特に、MaxValue を使用して無限を表現したいと考えています。MaxValue が静的メンバーである場合、次のようなことができると思います。

class ExtendedNumber[T <: {val MaxValue : T}] {
  val infinity = T.MaxValue
  ...
}

ただし、MaxValue はコンパニオン オブジェクトで定義されているため、コンパニオン オブジェクトに型制約を設定する必要があると思います。これは可能ですか?また、一般的な問題の他の解決策にもオープンです。

4

1 に答える 1

3

一般的な解決策は、次のような型クラスを追加することです。

trait ExtendedNumber[T] {
  def infinity: T
}

implicit object extendedInt extends ExtendedNumber[Int] {
  def infinity = Int.MaxValue
}

def foo[T](v: T)(implicit en: ExtendedNumber[T]) = v == en.infinity
于 2013-02-28T09:58:33.060 に答える