Spec-Zone.ru › Scala 3.1

Трейт 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 о типах-синглтонах на основе литералов.

Супертипы
класс Any

© 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

Spec-Zone.ru

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