Почему Numeric ведет себя иначе, чем Ordered?

Scala имеет ряд свойств, которые вы можете использовать как классы типов, например Ordered и Числовой в пакете scala.math .

Я могу, например, написать общий метод, используя Упорядоченный следующим образом:

def f[T <% Ordered[T]](a: T, b: T) = if (a < b) a else b

Я хотел проделайте то же самое с Numeric , но это не сработает:

def g[T <% Numeric[T]](a: T, b: T) = a * b

Почему существует очевидное несоответствие между Упорядоченный и Числовой ?

Я знаю, что есть другие способы сделать это, следующее будет работать (используется контекстная привязка):

def g[T : Numeric](a: T, b: T) = implicitly[Numeric[T]].times(a, b)

Но это выглядит более сложным, чем просто возможность использовать * для умножения двух чисел. Почему черта Numeric не включает такие методы, как * , а Упорядоченный включает такие методы, как ?

Я знаю, что есть также Порядок , который можно использовать так же, как Числовой , см. Также этот ответ :

def f[A : Ordering](a: A, b: A) = implicitly[Ordering[A]].compare(a, b)

10
задан Community 23 May 2017 в 12:13
поделиться