Класс ValueOf.ValueOf
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.2.0/scala/ValueOf.html