Класс scala.=:=
@implicitNotFound(msg = "Не удается доказать, что ${From} =:= ${To}.")
Экземпляр A =:= B свидетельствует о том, что типы A и B равны. Он также действует как A <:< B, но не как B <:< A (непосредственно) из-за ограничений на наследование.
В случае любых сомнений относительно того, какой метод используется в каком направлении, все методы "Co" (включая apply) идут слева направо в типе ("с" типом), а все методы "Contra" — справа налево ("против" типа). Например, apply преобразует From в To, а substituteContra заменяет 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.
}
|
| Надтипы |
Абстрактные методы
Исходный код
override def substituteBoth[F[_, _]](ftf: F[To, From]): F[From, To]
| Классы определений | <:< |
|---|
Конкретные методы
Исходный код
Если From = To и To = C, то From = C (равенство транзитивно)
Исходный код
override def apply(f: From): To
Принудительное преобразование From в To. Это гарантированно будет функцией тождества.
Этот метод часто вызывается неявно, так как неявный A =:= B также выступает в качестве неявного вида A => B.
| Классы определений | <:< -> Function1 |
|---|
Исходный код
Если From = To и C = From, то C = To (равенство транзитивно)
Исходный код
Если From = To то To = From (равенство симметрично)
Исходный код
| Классы определений | <:< |
|---|
Исходный код
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]
| Классы определений | <:< |
|---|
Наследованные методы
Исходный код
Если From <: To и To <: C, то From <: C (суботипирование транзитивно)
| Наследованно от | <:< |
|---|
Исходный код
override def andThen[C](r: To => C): From => C
| Классы определений | <:< -> Function1 |
|---|---|
| Наследованно от | <:< |
Исходный код
Если From <: To и C <: From, то C <: To (суботипирование транзитивно)
| Наследованно от | <:< |
|---|
Исходный код
override def compose[C](r: C => From): C => To
| Классы определений | <:< -> Function1 |
|---|---|
| Наследованно от | <:< |
Исходный код
| Классы определений | 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