Wdrażając sortable strukturę danych, myślałem zrobić coś takiego:Rodzaj parametr T ograniczony zamawiania [T]
trait MaxHeap[T <: Ordering[T]] {
def insert(e: T): Unit
...
}
Ale to nie działa dla typów takich jak MaxHeap [Int]. W standardowej bibliotece kolekcji typ elementu T kolekcji nie jest ograniczony. Zamiast tego zapewnia się tryb niejawny dla metod, które wymagają przekształcenia T na zamówienie [T], np.
trait Seq[+A] extends ... {
// it's Ordering[B], not Ordering[A], but the idea is the same.
def max[B >: A](implicit cmp: Ordering[B]): A
}
Moje pytanie jest, jeśli istnieje wiele metod w mojej klasie/cechy obejmujące porównanie, czy istnieje sposób, aby określić typ elementu klasa/cecha, aby być porównywalne, tak że nie trzeba zadeklarować implicits dla tych, metody?
Dziękuję @Petr. Ale w ten sposób 'T' nie jest wymuszane, aby być porównywalnym, jak gdyby był ograniczony na liście parametrów typu. Każde 'T' zrobi, pod warunkiem, że jest podany domniemany. – cfchou
'Zamawianie [_>: T]' jest techniką, której wcześniej nie widziałem. Zastanawiam się jednak, dlaczego nie użyć "Zamawiania [T]". Dogodne operatory, takie jak '>' pośrednio dostarczone przez 'Ordering.Implicits', nie wydają się działać z' Zamawianiem [_>: T] '. – cfchou
@ cfchou Aktualizuję odpowiedź, aby odpowiedzieć na twoje komentarze. –