Трейт scala.Singleton
final open trait Singleton
Singleton используется компилятором в качестве супертипа для типов-синглтонов. Это включает в себя литеральные типы, так как они также являются типами-синглтонами.
scala> object A { val x = 42 }
defined object A
scala> implicitly[A.type <:< Singleton]
res12: A.type <:< Singleton = generalized constraint
scala> implicitly[A.x.type <:< Singleton]
res13: A.x.type <:< Singleton = generalized constraint
scala> implicitly[42 <:< Singleton]
res14: 42 <:< Singleton = generalized constraint
scala> implicitly[Int <:< Singleton]
^
error: Cannot prove that Int <:< Singleton.
Singleton имеет специальное значение, когда он появляется как верхняя граница формального параметра типа. Обычно, вывод типов в Scala расширяет типы-синглтоны до базового не-синглтонного типа. Когда параметр типа имеет явную верхнюю границу Singleton, компилятор выводит тип-синглтон.
scala> def check42[T](x: T)(implicit ev: T =:= 42): T = x check42: [T](x: T)(implicit ev: T =:= 42)T scala> val x1 = check42(42) ^ error: Cannot prove that Int =:= 42. scala> def singleCheck42[T <: Singleton](x: T)(implicit ev: T =:= 42): T = x singleCheck42: [T <: Singleton](x: T)(implicit ev: T =:= 42)T scala> val x2 = singleCheck42(42) x2: Int = 42
См. также SIP-23 о типах-синглтонах на основе литералов.
| Супертипы |
|---|
© 2002-2022 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://scala-lang.org/api/3.1.1/scala/Singleton.html