Spec-Zone.ru › Scala 3.2

Класс ValueOf.ValueOf

Исходный код

final class ValueOf[T](val value: T) extends AnyVal

ValueOf[T] предоставляет уникальное значение типа T, где T — тип, имеющий единственного представителя. Подходящими типами являются одиночные типы вида stablePath.type, Unit и одиночные типы, соответствующие литералам значений.

Экземпляры ValueOf[T] предоставляются неявно для всех подходящих типов. Как правило, экземпляр требуется, когда необходимо значение во время выполнения, соответствующее вычислению на уровне типов.

Например, мы можем определить тип Residue[M <: Int], соответствующий группе целых чисел по модулю M. Мы можем потребовать, чтобы остатки можно было складывать только тогда, когда они параметризованы одним и тем же модулем.

case class Residue[M <: Int](n: Int) extends AnyVal {
 def +(rhs: Residue[M])(implicit m: ValueOf[M]): Residue[M] =
   Residue((this.n + rhs.n) % valueOf[M])
}

val fiveModTen = Residue[10](5)
val nineModTen = Residue[10](9)

fiveModTen + nineModTen    // OK == Residue[10](4)

val fourModEleven = Residue[11](4)

fiveModTen + fourModEleven // compiler error: type mismatch;
                          //   found   : Residue[11]
                          //   required: Residue[10]

Обратите внимание, что здесь модуль закодирован в типе значений и поэтому не требует дополнительных затрат памяти на хранение каждого значения. Когда значение модуля требуется в реализации +, оно предоставляется в месте вызова с помощью неявного аргумента m типа ValueOf[M].

Суперобъекты
класс AnyVal
трайт Matchable
класс Any

Конкретные поля

Исходный код
val value: T

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

Spec-Zone.ru

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