/ / Ograniczenia typu w obiekcie towarzyszącym parametru typu w scala - scala

Wpisz ograniczenia dla obiektu towarzyszącego parametru typu w scala - scala

Chciałbym zdefiniować sparametryzowaną klasęo nazwie ExtendedNumber, który przyjąłby jakąś formę liczby całkowitej, takiej jak Int lub Byte, i rozszerzyłby ją tak, aby obejmował nieskończoność,-nieskończoność i zero. W szczególności chciałbym użyć MaxValue do reprezentowania nieskończoności. Gdyby MaxValue był elementem statycznym, wierzę, że mógłbym zrobić coś takiego:

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

Ponieważ jednak MaxValue jest zdefiniowane wobiekt towarzyszący, uważam, że muszę nałożyć ograniczenie typu na obiekt towarzyszący. czy to możliwe? Jestem również otwarty na inne rozwiązania ogólnego problemu.

Odpowiedzi:

2 dla odpowiedzi № 1

Ogólnym rozwiązaniem jest dodanie klasy typu, na przykład:

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