Spec-Zone.ru › Scala 3.1

Объект scala.Tuple

Класс-компаньон • Исходный код

объект Tuple

Суперобъекты
Тракт Sum
Тракт Mirror
Класс Object
Тракт Matchable
Класс Any
Тип самого объекта
Tuple.type

Типы

Исходный код@experimental
тип Append[X <: Tuple, Y] = X match { case EmptyTuple => Y *: EmptyTuple case x *: xs => x *: Append[xs, Y] }

Тип кортежа с добавленным элементом

Исходный код
тип Concat[X <: Tuple, +Y <: Tuple] = X match { case EmptyTuple => Y case x1 *: xs1 => x1 *: Concat[xs1, Y] }

Тип конкатенации двух кортежей

Исходный код
тип Drop[T <: Tuple, N <: Int] = N match { case 0 => T case S[n1] => T match { case EmptyTuple => EmptyTuple case x *: xs => Drop[xs, n1] } }

Преобразует кортеж (T1, ..., Tn) в (Ti+1, ..., Tn).

Исходный код
тип Elem[X <: Tuple, N <: Int] = X match { case x *: xs => N match { case 0 => x case S[n1] => Elem[xs, n1] } }

Тип элемента в позиции N кортежа X

Исходный код
тип Filter[Tup <: Tuple, P <: ([_] =>> Boolean)] = Tup match { case EmptyTuple => EmptyTuple case h *: t => P[h] match { case true => h *: Filter[t, P] case false => Filter[t, P] } }

Фильтрует элементы кортежа, для которых предикат P возвращает false. Предикат P[X] — это тип, который может быть true или false. Например:

type IsString[x] = x match {
  case String => true
  case _ => false
}
Filter[(1, "foo", 2, "bar"), IsString] =:= ("foo", "bar")

Исходный код
тип FlatMap[Tup <: Tuple, F <: ([_ <: Union[Tup]] =>> Tuple)] = Tup match { case EmptyTuple => EmptyTuple case h *: t => Concat[F[h], FlatMap[t, F]] }

Преобразует кортеж (T1, ..., Tn) в сплюснутый (..F[T1], ..., ..F[Tn])

Исходный код
тип Fold[Tup <: Tuple, Z, F[_, _]] = Tup match { case EmptyTuple => Z case h *: t => F[h, Fold[t, Z, F]] }

Сворачивает кортеж (T1, ..., Tn) в F[T1, F[... F[Tn, Z]...]]]

Исходный код
тип Head[X <: NonEmptyTuple] = X match { case x *: _$13 => x }

Тип первого элемента кортежа

Исходный код@experimental
тип Init[X <: Tuple] = X match { case _$14 *: EmptyTuple => EmptyTuple case x *: xs => x *: Init[xs] }

Тип начальной части кортежа без последнего элемента

Исходный код
тип InverseMap[X <: Tuple, F[_]] = X match { case F[x] *: t => x *: InverseMap[t, F] case EmptyTuple => EmptyTuple }

Преобразует кортеж (F[T1], ..., F[Tn]) в (T1, ... Tn)

Исходный код
тип IsMappedBy[F[_]] = [X <: Tuple] =>> X =:= Map[InverseMap[X, F], F]

Неявное доказательство. IsMappedBy[F][X] присутствует в неявном контексте, если X является кортежем, тип каждого элемента которого сконструирован с помощью F. Например, (F[A1], ..., F[An]), но не (F[A1], B2, ..., F[An]), где B2 не имеет формы F[A].

Исходный код@experimental
тип Last[X <: Tuple] = X match { case x *: EmptyTuple => x case _$16 *: xs => Last[xs] }

Тип последнего элемента кортежа

Исходный код
тип Map[Tup <: Tuple, F[_ <: Union[Tup]]] = Tup match { case EmptyTuple => EmptyTuple case h *: t => F[h] *: Map[t, F] }

Преобразует кортеж (T1, ..., Tn) в (F[T1], ..., F[Tn])

Исходный код
тип Size[X <: Tuple] = X match { case EmptyTuple => 0 case x *: xs => S[Size[xs]] }

Литеральное целочисленное значение размера кортежа

Исходный код
тип Split[T <: Tuple, N <: Int] = (Take[T, N], Drop[T, N])

Разделяет кортеж (T1, ..., Tn) на пару двух кортежей (T1, ..., Ti) и (Ti+1, ..., Tn).

Исходный код
тип Tail[X <: NonEmptyTuple] = X match { case _$15 *: xs => xs }

Тип хвоста кортежа

Исходный код
тип Take[T <: Tuple, N <: Int] = N match { case 0 => EmptyTuple case S[n1] => T match { case EmptyTuple => EmptyTuple case x *: xs => x *: Take[xs, n1] } }

Преобразует кортеж (T1, ..., Tn) в (T1, ..., Ti).

Исходный код
тип Union[T <: Tuple] = Fold[T, Nothing, [x, y] =>> x | y]

Для данного кортежа (T1, ..., Tn), возвращает объединение его типов членов: T1 | ... | Tn. Возвращает Nothing, если кортеж пуст.

END_OF_DOCUMENT_MARKER

Источник
type Zip[T1 <: Кортеж, T2 <: Кортеж] = (T1, T2) match { case (h1 *: t1, h2 *: t2) => (h1, h2) *: Zip[t1, t2] case (ПустойКортеж, _$11) => ПустойКортеж case (_$12, ПустойКортеж) => ПустойКортеж case Любой => Кортеж }

Для двух кортежей, A1 *: ... *: An * At и B1 *: ... *: Bn *: Bt, где по крайней мере один из At или Bt является EmptyTuple или Tuple, возвращает тип кортежа (A1, B1) *: ... *: (An, Bn) *: Ct, где Ct равно EmptyTuple, если At или Bt равны EmptyTuple, в противном случае Ct равно Tuple.

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

Источник
type MirroredElemLabels <: Кортеж

Имена элементов продукта

Наследованно от Mirror

Источник
type MirroredLabel <: String

Название типа

Наследованно от Mirror

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

Источник
def apply(): ПустойКортеж

Пустой кортеж

Источник
def apply[T](x: T): T *: ПустойКортеж

Кортеж с одним элементом

Источник
def fromArray[T](xs: Массив[T]): Кортеж

Преобразовать массив в кортеж неизвестной арности и типов

Источник
def fromIArray[T](xs: IArray[T]): Кортеж

Преобразовать неизменяемый массив в кортеж неизвестной арности и типов

Источник
def fromProduct(product: Product): Кортеж

Преобразовать Product в кортеж неизвестной арности и типов

Источник
def fromProductTyped[P <: Product](p: P)(using m: ProductOf[P]): <none>

Источник
def unapply(x: ПустойКортеж): true

Сопоставляет пустой кортеж.

Указанные значения

Источник@since("3.1")
given canEqualEmptyTuple: CanEqual[ПустойКортеж, ПустойКортеж]

Источник@since("3.1")
given canEqualTuple[H1, T1 <: Кортеж, H2, T2 <: Кортеж](using eqHead: CanEqual[H1, H2], eqTail: CanEqual[T1, T2]): CanEqual[H1 *: T1, H2 *: T2]

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

Spec-Zone.ru

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