При реализации Сортируемых структур данных, я думал сделать что-то вроде этого:параметр Типа T ограничен для заказа [T]
trait MaxHeap[T <: Ordering[T]] {
def insert(e: T): Unit
...
}
Но это не будет работать для типов, таких как MaxHeap [Int]. В стандартной библиотеке коллекции тип элемента T коллекции не ограничен. Вместо этого подразумевается неявное, чтобы методы нуждались в его преобразовании T в Ordering [T], например.
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
}
Моим вопрос, если есть много методов в моем классе/черте с участием сравнения, есть способ определить тип элемента класса/черт, чтобы быть сопоставимы с тем, что мне не нужно объявлять implicits для тех, методы?
Спасибо @Petr. Но этот способ 'T' не применяется, чтобы быть сопоставимым, как если бы он был ограничен в списке параметров типа. Любой 'T' будет делать, если дано неявное. – cfchou
'Заказ [_>: T]' это техника, которую я раньше не видел. Но мне интересно, почему бы не использовать 'Ordering [T]'. Удобные операторы, такие как '>', косвенно предоставленные 'Ordering.Implicits', похоже, не работают с' Ordering [_>: T] '. – cfchou
@cfchou Я обновляю ответ, чтобы ответить на ваши комментарии. –