Spec-Zone.ru › Scala 3.1

Класс scala.=:=

Исходный код

@implicitNotFound(msg = "Не удается доказать, что ${From} =:= ${To}.")
sealed abstract class =:=[From, To] extends From <:< To with Serializable

Экземпляр A =:= B свидетельствует о том, что типы A и B равны. Он также действует как A <:< B, но не как B <:< A (непосредственно) из-за ограничений на наследование.

В случае любых сомнений относительно того, какой метод используется в каком направлении, все методы "Co" (включая apply) идут слева направо в типе ("с" типом), а все методы "Contra" — справа налево ("против" типа). Например, apply преобразует From в To, а substituteContra заменяет To в типе на From.

Параметры типа
From

тип, который доказан равным To

To

тип, который доказан равным From

См. также

<:< для выражения ограничений суботипирования

Пример

Вариант на месте scala.collection.mutable.ArrayBuffer#transpose

implicit class BufOps[A](private val buf: ArrayBuffer[A]) extends AnyVal {
  def inPlaceTranspose[E]()(implicit ev: A =:= ArrayBuffer[E]) = ???
  // Because ArrayBuffer is invariant, we can't make do with just a A <:< ArrayBuffer[E]
  // Getting buffers *out* from buf would work, but adding them back *in* wouldn't.
}
Надтипы
класс From <:< To
интерфейс Serializable
интерфейс From => To
класс Object
интерфейс Matchable
класс Any

Абстрактные методы

Исходный код
override def substituteBoth[F[_, _]](ftf: F[To, From]): F[From, To]

Классы определений <:<

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

Исходный код
def andThen[C](r: To =:= C): From =:= C

Если From = To и To = C, то From = C (равенство транзитивно)

Исходный код
override def apply(f: From): To

Принудительное преобразование From в To. Это гарантированно будет функцией тождества.

Этот метод часто вызывается неявно, так как неявный A =:= B также выступает в качестве неявного вида A => B.

Классы определений <:< -> Function1

Исходный код
def compose[C](r: C =:= From): C =:= To

Если From = To и C = From, то C = To (равенство транзитивно)

Исходный код
def flip: To =:= From

Если From = To то To = From (равенство симметрично)

Исходный код
override def liftCo[F[_]]: F[From] =:= F[To]

Классы определений <:<

Исходный код
override def liftContra[F[_]]: F[To] =:= F[From]

Поднять это свидетельство над конструктором типа F, но с перестановкой.

Классы определений <:<

Исходный код
override def substituteCo[F[_]](ff: F[From]): F[To]

Классы определений <:<

Исходный код
override def substituteContra[F[_]](ft: F[To]): F[From]

Классы определений <:<

Наследованные методы

Исходный код
def andThen[C](r: To <:< C): From <:< C

Если From <: To и To <: C, то From <: C (суботипирование транзитивно)

Наследованно от <:<

Исходный код
override def andThen[C](r: To => C): From => C

Классы определений <:< -> Function1
Наследованно от <:<

Исходный код
def compose[C](r: C <:< From): C <:< To

Если From <: To и C <: From, то C <: To (суботипирование транзитивно)

Наследованно от <:<

Исходный код
override def compose[C](r: C => From): C => To

Классы определений <:< -> Function1
Наследованно от <:<

Исходный код
override def toString(): String

Классы определений Function1 -> Any
Наследованно от Function1

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

Spec-Zone.ru

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