Класс scala.ValueOf
@implicitNotFound(msg = "Значение-синглтон для ${T} не найдено.")
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].
| Суперадресаты |
|---|
Конкретные поля
Исходник
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