Spec-Zone.ru › Scala 3.1

Класс scala.ValueOf

Исходный код

@implicitNotFound(msg = "Значение-синглтон для ${T} не найдено.")
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.1.1/scala/ValueOf.html

Spec-Zone.ru

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