Spec-Zone.ru › Scala 3.1

Объект scala.math.Ordering

Сопутствующий класс • Исходный код

объект Ordering extends LowPriorityOrderingImplicits

Это сопутствующий объект для тракта scala.math.Ordering.

Он содержит множество неявных упорядочений, а также методы для построения новых упорядочений.

Суператрибуты
тракт LowPriorityOrderingImplicits
класс Object
тракт Matchable
класс Any
Тип самого себя
Ordering.type

Классы

Исходный код
объект BigDecimal extends BigDecimalOrdering

Исходный код
тракт BigDecimalOrdering extends Ordering[BigDecimal]

Исходный код
объект BigInt extends BigIntOrdering

Исходный код
тракт BigIntOrdering extends Ordering[BigInt]

Исходный код
объект Boolean extends BooleanOrdering

Исходный код
тракт BooleanOrdering extends Ordering[Boolean]

Исходный код
объект Byte extends ByteOrdering

Исходный код
тракт ByteOrdering extends Ordering[Byte]

Исходный код
запечатанный тракт CachedReverse[T] extends Ordering[T]

Упорядочение, кэширующее значение его обратного упорядочения.

Исходный код
объект Char extends CharOrdering

Исходный код
тракт CharOrdering extends Ordering[Char]

Исходный код@migration(" По умолчанию неявное упорядочение для чисел с плавающей точкой double теперь поддерживает согласованность\n".+(" между методом `compare` и методами `lt`, `min`, `equiv` и т.д.,\n").+(" что означает несоответствие поведению IEEE 754 для -0.0 и NaN.\n").+(" Порядок сортировки чисел с плавающей точкой double остаётся тем же, с NaN в конце.\n").+(" Импортируйте Ordering.Double.IeeeOrdering, чтобы восстановить предыдущее поведение.\n").+(" См. также https://www.scala-lang.org/api/current/scala/math/Ordering$$Double$.html."), "2.13.0")
объект DeprecatedDoubleOrdering extends TotalOrdering

Исходный код@migration(" По умолчанию неявное упорядочение для чисел с плавающей точкой float теперь поддерживает согласованность\n".+(" между методом `compare` и методами `lt`, `min`, `equiv` и т.д.,\n").+(" что означает несоответствие поведению IEEE 754 для -0.0F и NaN.\n").+(" Порядок сортировки чисел с плавающей точкой float остаётся тем же, с NaN в конце.\n").+(" Импортируйте Ordering.Float.IeeeOrdering, чтобы восстановить предыдущее поведение.\n").+(" См. также https://www.scala-lang.org/api/current/scala/math/Ordering$$Float$.html."), "2.13.0")
объект DeprecatedFloatOrdering extends TotalOrdering

Исходный код
объект Double

Ordering для Double.

Поведение операций сравнения, предоставляемых по умолчанию (неявным) упорядочением для Double изменилось в версиях 2.10.0 и 2.13.0. До Scala 2.10.0, экземпляр Ordering использовал семантику, согласованную с java.lang.Double.compare.

Scala 2.10.0 изменила реализацию lt, equiv, min, и т.д., чтобы соответствовать IEEE 754, но сохранив метод compare несовместимым с ним, что привело к внутренней несогласованности. IEEE 754 предписывает, что 0.0 == -0.0. Кроме того, он требует, чтобы все сравнения с Double.NaN возвращали false, следовательно 0.0 < Double.NaN, 0.0 > Double.NaN, и Double.NaN == Double.NaN все приводят к false, аналогично None в flatMap.

Признавая ограничение семантики IEEE 754 в терминах упорядочения, Scala 2.13.0 создала два экземпляра: Ordering.Double.IeeeOrdering, который сохраняет семантику IEEE 754 из Scala 2.12.x, и Ordering.Double.TotalOrdering, который возвращает семантику java.lang.Double.compare для всех операций. По умолчанию расширяет TotalOrdering.

List(0.0, 1.0, 0.0 / 0.0, -1.0 / 0.0).sorted      // List(-Infinity, 0.0, 1.0, NaN)
List(0.0, 1.0, 0.0 / 0.0, -1.0 / 0.0).min         // -Infinity
implicitly[Ordering[Double]].lt(0.0, 0.0 / 0.0)   // true
{
  import Ordering.Double.IeeeOrdering
  List(0.0, 1.0, 0.0 / 0.0, -1.0 / 0.0).sorted    // List(-Infinity, 0.0, 1.0, NaN)
  List(0.0, 1.0, 0.0 / 0.0, -1.0 / 0.0).min       // NaN
  implicitly[Ordering[Double]].lt(0.0, 0.0 / 0.0) // false
}

Исходный код
тракт ExtraImplicits

Исходный код
объект Float

Ordering для Float.

Поведение операций сравнения, предоставляемых по умолчанию (неявным) упорядочением для Float изменилось в версиях 2.10.0 и 2.13.0. До Scala 2.10.0, экземпляр Ordering использовал семантику, согласованную с java.lang.Float.compare.

Scala 2.10.0 изменила реализацию lt, equiv, min, и т.д., чтобы соответствовать IEEE 754, но сохранив метод compare несовместимым с ним, что привело к внутренней несогласованности. IEEE 754 предписывает, что 0.0F == -0.0F. Кроме того, он требует, чтобы все сравнения с Float.NaN возвращали false, следовательно 0.0F < Float.NaN, 0.0F > Float.NaN, и Float.NaN == Float.NaN все приводят к false, аналогично None в flatMap.

Признавая ограничение семантики IEEE 754 в терминах упорядочения, Scala 2.13.0 создала два экземпляра: Ordering.Float.IeeeOrdering, который сохраняет семантику IEEE 754 из Scala 2.12.x, и Ordering.Float.TotalOrdering, который возвращает семантику java.lang.Float.compare для всех операций. По умолчанию расширяет TotalOrdering.

List(0.0F, 1.0F, 0.0F / 0.0F, -1.0F / 0.0F).sorted      // List(-Infinity, 0.0, 1.0, NaN)
List(0.0F, 1.0F, 0.0F / 0.0F, -1.0F / 0.0F).min         // -Infinity
implicitly[Ordering[Float]].lt(0.0F, 0.0F / 0.0F)       // true
{
  import Ordering.Float.IeeeOrdering
  List(0.0F, 1.0F, 0.0F / 0.0F, -1.0F / 0.0F).sorted    // List(-Infinity, 0.0, 1.0, NaN)
  List(0.0F, 1.0F, 0.0F / 0.0F, -1.0F / 0.0F).min       // NaN
  implicitly[Ordering[Float]].lt(0.0F, 0.0F / 0.0F)     // false
}

Исходный код
объект Implicits extends ExtraImplicits

Объект, содержащий неявные значения, которые не находятся в области видимости по умолчанию.

Исходный код
объект Int extends IntOrdering with CachedReverse[Int]

Исходный код
тракт IntOrdering extends Ordering[Int]

Исходный код
объект Long extends LongOrdering

Исходный код
тракт LongOrdering extends Ordering[Long]

Исходный код
тракт OptionOrdering[T] extends Ordering[Option[T]]

Исходный код
объект Short extends ShortOrdering

Источник
trait ShortOrdering extends Ordering[Short]

Источник
object String extends StringOrdering

Источник
trait StringOrdering extends Ordering[String]

Источник
object Symbol extends SymbolOrdering

Источник
trait SymbolOrdering extends Ordering[Symbol]

Источник
object Unit extends UnitOrdering

Источник
trait UnitOrdering extends Ordering[Unit]

Наследуемые типы

Источник
type AsComparable[A] = A => Comparable[_ >: A]

Наследуется от LowPriorityOrderingImplicits

Конкретные методы

Источник@inline
def apply[T](implicit ord: Ordering[T]): Ordering[T]

Источник
def by[T, S](f: T => S)(implicit ord: Ordering[S]): Ordering[T]

Учитывая f, функцию из T в S, создаёт Ordering[T], функция сравнения которого эквивалентна:

def compare(x:T, y:T) = Ordering[S].compare(f(x), f(y))

Эта функция является аналогом Ordering.on, где параметр Ordering[S] передаётся неявно.

Источник
def fromLessThan[T](cmp: (T, T) => Boolean): Ordering[T]

Создаёт Ordering[T] на основе функции lt.

Неявные значения

Источник
implicit def Option[T](implicit ord: Ordering[T]): Ordering[Option[T]]

Источник
implicit def Tuple2[T1, T2](implicit ord1: Ordering[T1], ord2: Ordering[T2]): Ordering[(T1, T2)]

Источник
implicit def Tuple3[T1, T2, T3](implicit ord1: Ordering[T1], ord2: Ordering[T2], ord3: Ordering[T3]): Ordering[(T1, T2, T3)]

Источник
implicit def Tuple4[T1, T2, T3, T4](implicit ord1: Ordering[T1], ord2: Ordering[T2], ord3: Ordering[T3], ord4: Ordering[T4]): Ordering[(T1, T2, T3, T4)]

Источник
implicit def Tuple5[T1, T2, T3, T4, T5](implicit ord1: Ordering[T1], ord2: Ordering[T2], ord3: Ordering[T3], ord4: Ordering[T4], ord5: Ordering[T5]): Ordering[(T1, T2, T3, T4, T5)]

Источник
implicit def Tuple6[T1, T2, T3, T4, T5, T6](implicit ord1: Ordering[T1], ord2: Ordering[T2], ord3: Ordering[T3], ord4: Ordering[T4], ord5: Ordering[T5], ord6: Ordering[T6]): Ordering[(T1, T2, T3, T4, T5, T6)]

Источник
implicit def Tuple7[T1, T2, T3, T4, T5, T6, T7](implicit ord1: Ordering[T1], ord2: Ordering[T2], ord3: Ordering[T3], ord4: Ordering[T4], ord5: Ordering[T5], ord6: Ordering[T6], ord7: Ordering[T7]): Ordering[(T1, T2, T3, T4, T5, T6, T7)]

Источник
implicit def Tuple8[T1, T2, T3, T4, T5, T6, T7, T8](implicit ord1: Ordering[T1], ord2: Ordering[T2], ord3: Ordering[T3], ord4: Ordering[T4], ord5: Ordering[T5], ord6: Ordering[T6], ord7: Ordering[T7], ord8: Ordering[T8]): Ordering[(T1, T2, T3, T4, T5, T6, T7, T8)]

Источник
implicit def Tuple9[T1, T2, T3, T4, T5, T6, T7, T8, T9](implicit ord1: Ordering[T1], ord2: Ordering[T2], ord3: Ordering[T3], ord4: Ordering[T4], ord5: Ordering[T5], ord6: Ordering[T6], ord7: Ordering[T7], ord8: Ordering[T8], ord9: Ordering[T9]): Ordering[(T1, T2, T3, T4, T5, T6, T7, T8, T9)]

Наследуемые неявные значения

Источник
implicit def comparatorToOrdering[A](implicit cmp: Comparator[A]): Ordering[A]

Наследуется от LowPriorityOrderingImplicits

Источник
implicit def ordered[A](implicit asComparable: () => A): Ordering[A]

Это бы создало конфликт со всеми доступными неявными Ordering, но благодаря магии приоритетных неявных значений через наследование, мы можем заставить Ordered[A] => Ordering[A] появиться только если ничего другого не работает. Поскольку Ordered[A] всё равно наследуется от Comparable[A], мы можем добавить также взаимодействие с Java.

Наследуется от LowPriorityOrderingImplicits

© 2002-2022 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://scala-lang.org/api/3.1.1/scala/math/Ordering$.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API