Я думаю, что вы ищете вид границы
def first[T <% Ordered[T]](a: T, b: T) = {
a compare b match {
case -1 | 0 => a
case 1 => b
}
}
Тогда
scala> first(3, 2)
res3: Int = 2
За кулисами граница вида будет компилироваться в неявный параметр, который преобразует тип T
в Ordered[T]
. Ответ Даниэля Собрала имеет хорошее объяснение: Что такое контекст Scala и границы просмотра?
Редактировать . Представленный в Scala 2.8, Ordering
может быть предпочтительным способом сравнения, но я не смог найти однозначного руководства. Я предполагаю, что Ordered
обладает преимуществом совместимости с Comparable
в Java, и, как отмечали другие, существуют неявные преобразования между Ordered
и Ordering
.