2014-07-30 3 views
1

Я играю с алгоритмами сортировки. Мне было любопытно, были ли встроенные функции сравнения для примитивных типов. Я знаю, что очень просто ввести (x: Int, y: Int) => x - y. Я просто хочу знать, есть ли встроенное сравнение, поэтому я не изобретаю колесо. Вещи, очевидно, усложняются, когда дело доходит до строк (чувствительных к регистру и чувствительных к культуре). Я был бы удивлен, если бы не было чего-то уже встроенного.Получение функций сравнения в Scala

+0

'_ - _' еще проще, или, если вывод типа недоступен,' (_: Int) - (_: Int) '. –

ответ

5

Если тип A имеет Ordering экземпляр, вы можете получить, написав Ordering[A] и Orderingcompare есть метод, который вы можете ЕТА расширить функции, которую вы ищете:

scala> Ordering[Int].compare _ 
res0: (Int, Int) => Int = <function2> 

As особый случай для примитивов (и несколько других типов), вы можете обратиться к экземпляру непосредственно:

scala> Ordering.Int.compare _ 
res1: (Int, Int) => Int = <function2> 

и в более общем плане, если у вас есть класс типов F и A имеет экземпляр, вы можете получить этот экземпляр, написав implicitly[F[A]], так что следующее работает:

scala> implicitly[Ordering[Int]].compare _ 
res2: (Int, Int) => Int = <function2> 

Я бы использовать первый из этих вариантов, однако.

Смежные вопросы